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 中建立測試專案

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

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

  • 以滑鼠右鍵單擊 [方案總管] 中的 [方案] 節點。
  • 在內容選單中,選擇 新增 > 新專案
  • Language 設定為 C++ ,並在搜尋方塊中輸入 測試 。 下列螢幕擷取畫面顯示在安裝 C++ 桌面開發 UWP 開發 工作負載後可用的測試專案:
  • 如果測試程式代碼未匯出您想要測試的函式,請將輸出 .obj .lib 檔案新增至測試專案的相依性。 如需更多資訊,請參閱 ,了解如何將測試連結至物件或程式庫檔案, 。 請勿包含具有 main 函式或另一個標準進入點的物件檔案,例如 wmain WinMain DllMain 。 當您將新的來源檔案新增至專案時,請更新測試專案相依性以包含對應的物件檔。

    為頭檔新增 #include 指示詞

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

    若要避免在原始程式檔中的每個 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 巨集,使方法可從 [測試總管] 視窗中被探索到。

    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 類別包含許多其他方法,可比較預期的結果與實際結果。

    您可以將 特性 新增至測試方法,以指定測試擁有者、優先順序和其他資訊。 然後,您可以使用這些值,在 [測試總管] 中排序和分組測試。 如需詳細資訊,請參閱 使用測試總管執行單元測試

  • 在 [測試] 功能表上,選擇 [測試總管]。 下圖顯示執行測試之前的測試專案。

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

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

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

    使用 CodeLens

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

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

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

  • 編輯並建置您的測試專案或方案。
  • 重建您的專案或方案。
  • 從 [測試總管] 視窗中執行測試。
  • 初始化 CodeLens 之後,您可以看到每個單元測試上方的測試狀態圖示。