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
。 當您將新的來源檔案新增至專案時,請更新測試專案相依性以包含對應的物件檔。
在您的單元測試
.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 之後,您可以看到每個單元測試上方的測試狀態圖示。