共用方式為


在 Visual Studio 中撰寫 C/C++ 的單元測試

您可以使用 [測試總管] 視窗來撰寫及執行 C++ 單元測試。 它的運作方式就像對其他語言所做的一樣。 如需使用測試總管的詳細資訊,請參閱使用測試總管執行單元測試

注意

C++ 不支援 Live Unit Testing、自動程式化 UI 測試和 IntelliTest 等某些功能。

Visual Studio 隨附這些 C++ 測試架構,無需額外下載:

  • 適用於 C++ 的 Microsoft 單元測試架構
  • Google Test
  • Boost.Test
  • CTest

您可以使用已安裝的架構,或針對您想要在 Visual Studio 中使用的任何架構撰寫自己的測試配接器。 測試配接器會將單元測試與 [測試總管] 視窗整合。 Visual Studio Marketplace有數個非 Microsoft 適配器可用。 如需詳細資訊,請參閱 安裝單元測試架構

  • Visual Studio 2017 及更新版本 (Professional and Enterprise)

    C++ 單元測試專案支援 CodeLens

  • Visual Studio 2017 及更新版本 (所有版本)

    • Google Test 配接器隨附作為 [使用 C++ 的桌面開發] 工作負載的預設元件。 它有一個專案範本,您可以將其新增到解決方案中。 以滑鼠右鍵按一下 [方案總管] 中的方案節點,然後選擇快捷方式功能表上的 [新增>新增專案] 以新增專案範本。 它也具有您可以使用 Tools>Options來設定的選項。 如需詳細資訊,請參閱如何:在 Visual Studio 中使用 Google Test

    • Boost.Test 隨附作為 [使用 C++ 的桌面開發] 工作負載的預設元件。 它已與 [測試總管] 整合,但目前沒有專案範本。 您必須手動進行設定。 如需詳細資訊,請參閱如何:在 Visual Studio 中使用 Boost.Test

    • CTest 支援已隨附於 [使用 C++ 的桌面開發] 工作負載之一部分的 [C++ CMake 工具] 元件。 如需詳細資訊,請參閱如何:在 Visual Studio 中使用 CTest

  • 舊版 Visual Studio

    您可以在 Visual Studio Marketplace 上下載 Google Test 配接器和 Boost.Test 配接器延伸模組。 可在「適用於 Boost.Test 的測試配接器」「適用於 Google Test 的測試配接器」中找到它們。

提示

您也可以使用 Copilot /tests Slash 命令,從程式碼產生單元測試。 例如,您可以輸入 /tests using Boost framework 以產生 Boost.Test 測試。 如需詳細資訊,請參閱在 Copilot Chat 使用 Slash 命令

基本測試工作流程

下列各節說明協助您開始使用 C++ 單元測試的基本步驟。 Microsoft 和 Google Test 架構的基本組態類似。 Boost.Test 需要您手動建立測試專案。

在 Visual Studio 2022 中建立測試專案

在一或多個測試專案內定義並執行單元測試。 測試專案會建立一個單獨的應用程式,以呼叫可執行檔中的程式碼並報告其行為。 在與您要測試的程式碼相同的解決方案中建立測試專案。

若要將新的測試專案新增至現有的方案:

  1. 以滑鼠右鍵按一下 [方案總管] 中的 [方案] 節點。
  2. 在內容選單中,選擇 新增>新專案
  3. Language 設定為 C++,並在搜尋方塊中輸入 測試。 下列螢幕擷取畫面顯示當安裝 C++UWP 開發 工作負載時可用的測試專案:

螢幕快照顯示 [新增專案] 視窗,並且在 Visual Studio 2022 中選擇了 C++。

在 Visual Studio 2019 中建立測試專案

在一或多個測試專案內定義並執行測試。 在與您要測試的程式碼相同的解決方案中建立專案。

若要將新的測試專案新增至現有的方案:

  1. 以滑鼠右鍵按一下 [方案總管] 中的 [方案] 節點。
  2. 在內容選單中,選擇 新增>新專案
  3. Language 設定為 C++,並在搜尋方塊中輸入 測試。 下列螢幕快照顯示安裝 C++ 桌面開發UWP 開發 工作負載後可用的測試專案:

螢幕快照顯示Visual Studio 2019 中已選取C++的 [新增專案] 視窗。

在方案中建立其他專案的參考

若要啟用對受測專案中函式的存取,請在測試專案中新增對該專案的參考。 在 [方案總管]中,展開您的測試專案。 以滑鼠右鍵按兩下 [參考],然後選取 [[新增>參考]。 在 [[新增參考] 對話框中,選擇您要測試的專案。

螢幕快照顯示 Visual Studio 2022 中的 [新增參考] 對話方塊。

如果測試程式代碼未匯出您想要測試的函式,請將輸出 .obj.lib 檔案新增至測試專案的相依性。 如需詳細資訊,請參閱若要將測試連結至物件或程式庫檔案。 請勿包含具有 main 函式或其他標準進入點 (例如 wmainWinMainDllMain) 的物件檔案。 當您將新的來源檔案新增至專案時,請更新測試專案相依性以包含對應的物件檔。

針對標頭檔新增 #include 指示詞

在單元測試 .cpp 檔案中,為宣告您要測試的類型和函式的任何標頭檔案新增 #include 指令。 輸入 #include ",然後 IntelliSense 會啟動來協助您做選擇。 針對任何更多的標頭重複此動作。

螢幕快照顯示方案總管,其中有一個 #include 語句,其頭檔由 IntelliSense 在 Visual Studio 2022 中醒目提示。

提示

若要避免在來源檔案中的每個 include 陳述式中輸入完整路徑,請在 [專案>屬性>C/C++>一般>其他 Include 目錄] 中新增必要的資料夾。

撰寫測試方法

注意

本節說明適用於 C/C++ 的 Microsoft 單元測試架構語法。 如需詳細資訊,請參閱 Microsoft.VisualStudio.TestTools.CppUnitTestFramework API 參考

如需 Google Test 文件,請參閱 Google Test primer (Google Test 入門)。 如需 Boost.Test,請參閱 Boost Test library: The unit test framework (Boost Test 程式庫:單元測試架構)。

測試專案中 .cpp 檔案有為您定義的存根類別和方法。 它們會顯示如何撰寫測試程式碼的範例。 這些簽章使用 TEST_CLASS 和 TEST_METHOD 巨集,因此可從 [測試總管] 視窗探索方法。

螢幕快照顯示 Visual Studio 2022 中使用 TEST_CLASS 和 TEST_METHOD 巨集的存根類別和方法。

螢幕快照顯示 Visual Studio 2019 中的存根類別和方法,這些類別和方法使用了 TEST_CLASS 和 TEST_METHOD 巨集。

TEST_CLASS 和 TEST_METHOD 是 Microsoft 原生測試架構的一部分。 測試總管以類似的方式來探索其他支援架構中的測試方法。

TEST_METHOD 傳回 void。 若要產生測試結果,請使用 Assert 類別中的靜態方法,以針對預期的結果測試實際結果。 在下列範例中,假設 MyClass 具有接受 std::string 的建構函式。 此範例示範了如何測試建構函式是否按照您期望的方式初始化類別:

TEST_METHOD(TestClassInit)
{
    std::string name = "Bill";
    MyClass mc(name);
    Assert::AreEqual(name, mc.GetName());
}

在上述範例中,Assert::AreEqual 呼叫的結果會判斷測試成功或失敗。 Assert 類別包含許多其他方法可用來將預期結果與實際結果進行比較。

您可以將「特徵」新增至測試方法中以指定測試擁有者、優先順序和其他資訊。 接著可以使用這些值來排序及分組測試總管中的測試。 如需詳細資訊,請參閱使用測試總管執行單元測試

執行測試

  1. 在【測試】功能表上,選擇【測試總管】。 下圖顯示執行測試之前的測試專案。

    在執行測試之前,螢幕快照顯示 Visual Studio 2022 中的測試總管。

    螢幕快照顯示在 Visual Studio 2019 中執行測試之前的測試總管。

    注意

    目前無法將 CTest 與測試總管整合。 從 CMake 主功能表執行 CTest 測試。

  2. 如果視窗中遺漏任何測試,請在 [方案總管] 中以滑鼠右鍵按一下其節點,然後選擇 [建置][重建] 以建置測試專案。

  3. 在 [測試總管] 中,選擇 [全部執行],或選取您要執行的特定測試。 以滑鼠右鍵按一下測試即可顯示其他選項,包括在啟用中斷點的偵錯模式中執行測試。 在所有測試都執行之後,視窗會顯示通過的測試以及失敗的測試。

    這張螢幕快照顯示在 Visual Studio 2022 中執行測試後的 Test Explorer。

    螢幕快照顯示Visual Studio 2019中執行測試之後的測試總管。

對於失敗的測試,該訊息會顯示可協助診斷原因的詳細資料。 以滑鼠右鍵按一下失敗的測試,以顯示快顯功能表。 選擇 [偵錯] 以逐步偵錯發生失敗的函式。

如需使用 [測試總管] 的詳細資訊,請參閱使用測試總管執行單元測試

如需單元測試的詳細資訊,請參閱單元測試基本概念

使用 CodeLens

Visual Studio 2017 和更新版本 (Professional 與 Enterprise 版)

CodeLens 可讓您快速查看單元測試的狀態,而不需要離開程式碼編輯器。

以下列任何一種方式來為 C++ 單元測試專案初始化 CodeLens:

  • 編輯及建置測試專案或方案。
  • 重建您的專案或方案。
  • [測試總管] 視窗執行測試。

初始化 CodeLens 之後,您可以看到每個單元測試上方的測試狀態圖示。

螢幕快照顯示 Visual Studio 2019 中C++ CodeLens 圖示。

選擇圖示以取得詳細資訊,或者執行單元測試或對單元測試進行偵錯:

螢幕快照顯示C++ CodeLens 圖示之後,請在Visual Studio 2022 中選取它以取得詳細數據。