共用方式為


在 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 Adapter 包含在 Desktop 使用 C++ 工作負載的預設元件中。 它有一個項目範本,您可以新增至方案。 以滑鼠右鍵按兩下 [方案總管] 中的方案節點,然後選擇快捷方式功能表上 的 [新增>新增專案],以新增專案範本。 它也具有您可以使用 Tools>Options來設定的選項。 如需詳細資訊,請參閱 如何:在 Visual Studio 中使用 Google Test

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

    • CTest 支援包含在 C++ CMake 工具 元件中,這是 使用 C++ 進行桌面開發 工作負載的一部分。 如需詳細資訊,請參閱 如何:在 Visual Studio 中使用 CTest

  • 舊版 Visual Studio

    您可以在 Visual Studio Marketplace 上下載 Google Test 配接器和 Boost.Test 配接器延伸模組。 在 測試配接器中尋找這些適用於 Boost.Test,並在 測試配接器裡找適用於 Google Test的這些。

提示

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

基本測試工作流程

下列各節說明開始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 會啟動以協助您選擇。 針對更多標頭重複執行。

螢幕快照顯示方案總管,其中在 Visual Studio 2022 中使用 IntelliSense 而使 #include 指令的頭檔被醒目提示。

提示

若要避免在原始程式檔中的每個 include 語句中輸入完整路徑,請在 Project>Properties>C/C++ 中新增必要的資料夾,>[一般]>[其他 Include 目錄]

撰寫測試方法

注意

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

如需 Google Test 文件,請參閱 Google Test 入門。 如需 Boost.Test,請參閱 Boost 測試連結庫:單元測試架構

測試專案中 .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 中進行測試之前的 Test Explorer。

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

    注意

    CTest 與 測試總管 的整合尚未提供。 從 CMake 主功能表執行 CTest 測試。

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

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

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

    螢幕快照顯示在 Visual Studio 2019 中執行測試後的測試資源管理器。

針對失敗的測試,訊息會顯示可協助診斷原因的詳細數據。 對失敗測試右鍵單擊以顯示彈出選單。 選擇 [除錯] 以逐步執行發生失敗的函式。

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

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

使用 CodeLens

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

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

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

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

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

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

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

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