在 Visual Studio 中使用適用於 C++ 的 Microsoft 單元測試架構
適用於 C++ 的 Microsoft 單元測試架構預設隨附於 [使用 C++ 的桌面開發] 工作負載。
在個別專案中撰寫單元測試
一般而言,您會在程式碼專屬的專案中測試程式碼,且該專案與您要測試的程式碼位於相同的方案中。 若要安裝及設定新的測試專案,請參閱撰寫 C/C++ 的單元測試。
在相同專案中撰寫單元測試
在某些情況下 (例如在 DLL 中測試非匯出函式時),您可能需要在與要欲測試程式相同的專案中建立測試。 若要在相同專案中撰寫單元測試:
修改專案屬性,以包含單元測試所需的標頭和程式庫檔案。
在 [方案總管] 中,於受測專案的捷徑功能表上選擇 [屬性]。 專案的屬性視窗便會開啟。
在 [屬性頁] 對話方塊中,選取 [組態屬性]>[VC++ 目錄]。
選取下列資料列中的向下箭號,然後選擇 <編輯>。 加入這些路徑:
Directory 屬性 Include 目錄 $(VCInstallDir)Auxiliary\VS\UnitTest\include 程式庫目錄 $(VCInstallDir)Auxiliary\VS\UnitTest\lib
加入 C++ 單元測試檔案:
在 [方案總管] 中,以滑鼠右鍵按一下專案節點,然後選擇 [新增]>[新增項目]。
在 [新增項目] 對話方塊中,選取 [C++ 檔案 (.cpp)],並為其指定適當的名稱,然後選擇 [新增]。
將測試連結至物件或程式庫檔案
如果受測程式碼不會匯出您要測試的函式,您可以將輸出 .obj 或 .lib 檔案新增至測試專案的相依性。 修改測試專案的屬性,以包含單元測試所需的標頭和程式庫或物件檔案。
在方案總管中,於測試專案的捷徑功能表上,選擇 [屬性]。 專案的屬性視窗便會開啟。
選取 [組態屬性]>[連結器]>[輸入] 頁面,然後選取 [其他相依性]。
選擇 [編輯],然後新增 .obj 或 .lib 檔案的名稱。 不要使用完整路徑名稱。
選取 [組態屬性]>[連結器]>[一般] 頁面,然後選取 [其他程式庫目錄]。
選擇 [編輯],然後新增 .obj 或 .lib 檔案的目錄路徑。 該路徑通常是位於受測專案的組建資料夾內。
選取 [組態屬性]>[VC++ 目錄] 頁面,然後選取 [包含目錄]。
選擇 [編輯],然後新增受測專案的標頭目錄。
撰寫測試
使用測試類別的任何 .cpp 檔都必須包含 "CppUnitTest.h",並具有 using namespace Microsoft::VisualStudio::CppUnitTestFramework
的 using 陳述式。 系統已為您設定測試專案。 它也包含命名空間定義,以及 TEST_CLASS 和 TEST_METHOD,以協助您開始進行。 您可以修改命名空間名稱,以及類別和方法巨集中以括弧括住的名稱。
測試架構會定義特殊巨集,用於初始化測試模組、類別和方法,以及在測試完成後清除資源。 這些巨集會產生程式碼,以在第一次存取類別或方法之前執行,以及在最後一個測試執行之後執行。 如需詳細資訊,請參閱初始化和清除。
使用 Assert 類別中的靜態方法來定義測試條件。 使用 Logger 類別將訊息寫入至 [輸出視窗]。 將屬性新增至測試方法
執行測試
在 [測試] 功能表上,選擇 [Windows]>[測試總管]。
如果視窗中未顯示您所有的測試,請建置測試專案,方法是在方案總管中,以滑鼠右鍵按一下其節點,然後選擇 [建置] 或 [重建]。
在 [測試總管] 中,選擇 [全部執行],或選取您要執行的特定測試。 以滑鼠右鍵按一下測試即可顯示其他選項,包括在啟用中斷點的偵錯模式中執行測試。
在 [輸出視窗] 的下拉式清單中,選擇 [測試],以檢視由
Logger
類別寫出的訊息:
定義特徵以啟用群組
您可以在測試方法上定義特徵,以便您分類及分組測試總管中的測試。 若要定義特性,請使用 TEST_METHOD_ATTRIBUTE
巨集。 例如,若要定義名為 TEST_MY_TRAIT
的特性:
#define TEST_MY_TRAIT(traitValue) TEST_METHOD_ATTRIBUTE(L"MyTrait", traitValue)
若要在單元測試中使用定義的特性:
BEGIN_TEST_METHOD_ATTRIBUTE(Method1)
TEST_OWNER(L"OwnerName")
TEST_PRIORITY(1)
TEST_MY_TRAIT(L"thisTraitValue")
END_TEST_METHOD_ATTRIBUTE()
TEST_METHOD(Method1)
{
Logger::WriteMessage("In Method1");
Assert::AreEqual(0, 0);
}
C++ 特性屬性巨集
下列預先定義的特徵位於 CppUnitTest.h
中。 如需詳細資訊,請參閱適用於 C++ 的 Microsoft 單元測試架構 API 參考。
Macro | 描述 |
---|---|
TEST_METHOD_ATTRIBUTE(attributeName, attributeValue) |
使用 TEST_METHOD_ATTRIBUTE 巨集定義特性。 |
TEST_OWNER(ownerAlias) |
使用預先定義的擁有者特性,指定測試方法的擁有者。 |
TEST_PRIORITY(priority) |
使用預先定義的優先權特性,將相對優先權指派給測試方法。 |