使用測試總管針對現有 C++ 應用程式執行單元測試
我們建議在變更現有的應用程式之前,您要確定它能夠良好地涵蓋單元測試。這會讓您對於變更不會產生 Bug 有信心。如果應用程式尚未具有單元測試,您可以使用本主題中所示範的技術來加入單元測試。本主題說明如何為現有的 Visual C++ 程式碼加入單元測試,從決定如何測試程式碼開始,然後建立、撰寫測試,最後則執行測試。
決定如何測試程式碼
開啟現有的 C++ 專案,並檢查它以決定您要如何加入單元測試。您可能會想要使用某些模型工具,來協助您了解程式碼中的相依性,以及協助您了解組件的互動方式。如需詳細資訊,請參閱視覺化程式碼。
我們建議您將變更工作拆解為小型的工作。在進行每個小變更之前,都要針對會保持相同行為的各個方面來撰寫單元測試。在您進行變更之後,這些測試仍持續會成功。例如,如果您想要變更某個排序函式,讓它依姓氏而不是依名字來排序人員清單,那麼您就可以撰寫單元測試以驗證所有輸入名稱會出現在輸出中。進行這項變更之後,您可能會想要針對新行為加入新的單元測試。
如果可行,您的大部分或所有單元測試都應該只使用匯出的函式。不過,如果您只是變更整個應用程式的一小部分,則您可能會想要使用不是匯出的函式。例如,您可能需要會叫用內部函式的測試,或者是會設定並取得內部變數值的測試。
有幾種方式可以測試產品程式碼,這取決於產品是否有公開您要測試的介面。請選擇下列其中一種方式:
- 單元測試只會使用從受測程式碼匯出的函式:
加入個別的測試專案。在測試專案中,加入受測專案的參考。
移至下列程序:參考從測試專案匯出的函式。
受測程式碼會建置為 .exe 檔案:
加入個別的測試專案。將它連結至輸出目的檔。移至下列程序:將測試連結至物件或程式庫檔案。
單元測試必須使用私用函式和資料,而受測程式碼可以建置成靜態程式庫:
變更受測專案,讓它編譯為 .lib 檔。加入會參考受測專案的個別測試專案。這個方法有一個優點,就是可讓您的測試使用私用成員,但仍然將測試保留在個別專案中。不過,這可能不適用於某些應用程式,在這類應用程式中您必須具有動態連結程式庫 (.dll)。
請移至將受測程式碼變更為靜態程式庫這個程序。
單元測試必須使用私用函式和資料,而程式碼必須建置成動態連結程式庫 (DLL):
將單元測試加入至與產品程式碼相同的專案中。請移至將單元測試加入至同一個專案這個程序。
建立測試
若要將受測程式碼變更為靜態程式庫
如果您的測試必須使用不是由受測專案匯出的成員,並且受測專案是建置為動態程式庫,請考慮將它轉換成靜態程式庫。
在 [方案總管] 中,在受測專案的捷徑功能表上選擇 [屬性]。專案的屬性視窗便會開啟。
選擇 [組態屬性]、[一般]。
將 [組態類型] 設定為 [靜態程式庫 (.lib)]。
繼續進行下列程序:將測試連結至物件或程式庫檔案。
若要從測試專案參考匯出的函式
如果受測專案會匯出您要測試的函式,那麼您就可以從測試專案加入程式碼專案的參考。
建立 C++ 測試專案。
- 在 [檔案] 功能表上,依序選擇 [新增]、[專案]、[Visual C++]、[測試]、[C++ 單元測試專案]。
在 [方案總管] 中,在測試專案的捷徑功能表上,選擇 [參考]。專案的屬性視窗便會開啟。
選取 [通用屬性]、[架構和參考],然後選取 [加入新參考] 按鈕。
選取 [專案],然後選取要測試的專案。
選擇 [加入] 按鈕。
在測試專案的屬性中,將受測專案的位置加入至 [Include 目錄] 中。
選擇 [組態屬性]、[VC++ 目錄]、[Include 目錄]。
選擇 [編輯],然後加入受測專案的標頭目錄。
移至撰寫單元測試這個程序。
若要將測試連結至物件或程式庫檔案
如果受測程式碼不會匯出您要測試的函式,您可以將輸出 .obj 或 .lib 檔案加入至測試專案的相依性。
建立 C++ 測試專案。
- 在 [檔案] 功能表上,依序選擇 [新增]、[專案]、[Visual C++]、[測試]、[C++ 單元測試專案]。
在 [方案總管] 中,在測試專案的捷徑功能表上,選擇 [屬性]。專案的屬性視窗便會開啟。
選擇 [組態屬性]、[連結器]、[輸入]、[其他相依性]。
選擇 [編輯],然後加入 .obj 或 .lib 檔案的名稱。不要使用完整路徑名稱。
選擇 [組態屬性]、[連結器]、[一般]、[其他程式庫目錄]。
選擇 [編輯],然後加入 .obj 或 .lib 檔案的目錄路徑。該路徑通常是位於受測專案的組建資料夾內。
選擇 [組態屬性]、[VC++ 目錄]、[Include 目錄]。
選擇 [編輯],然後加入受測專案的標頭目錄。
移至撰寫單元測試這個程序。
若要在相同專案中加入單元測試
修改產品程式碼專案屬性,以包含單元測試所需的標頭和程式庫檔案。
在 [方案總管] 中,在受測專案的捷徑功能表中選擇 [屬性]。專案的屬性視窗便會開啟。
選擇 [組態屬性]、[VC++ 目錄]。
編輯 Include 目錄和程式庫目錄:
Include 目錄
$(VCInstallDir)UnitTest\include;$(IncludePath)
程式庫目錄
$(VCInstallDir)UnitTest\lib;$(LibraryPath)
加入 C++ 單元測試檔案:
- 在 [方案總管] 中,在專案的捷徑功能表中,選擇 [加入]、[新增項目],然後選擇 [C++ 單元測試]。
移至撰寫單元測試這個程序。
撰寫單元測試
在每個單元測試程式碼檔案中,為受測專案的標頭加入一個 #include 陳述式。
在單元測試程式碼檔案中加入測試類別和方法。例如:
#include "stdafx.h" #include "CppUnitTest.h" #include "MyProjectUnderTest.h" using namespace Microsoft::VisualStudio::CppUnitTestFramework; namespace MyTest { TEST_CLASS(MyTests) { public: TEST_METHOD(MyTestMethod) { Assert::AreEqual(MyProject::Multiply(2,3), 6); } }; }
如需詳細資訊,請參閱使用測試總管針對機器碼執行單元測試。
執行測試
在 [檢視] 功能表上,選擇 [其他視窗]、[測試總管]。
在 [測試總管] 中,選擇 [全部執行]。
如需詳細資訊,請參閱快速入門:搭配測試總管進行以測試為導向的開發工作。