文檔金喜正規買球>>Visual Studio系列教程>>Visual Studio 使用教程:如何編寫C ++ DLL的單元測試(上)
Visual Studio 使用教程:如何編寫C ++ DLL的單元測試(上)
Visual Studio是功能完備的 IDE,可用于編碼、調試、測試和部署到任何平臺,Visual Studio使用 .NET 開發 iOS、Android 和 Web 應用和游戲。
本演練介紹如何使用測試優先方法開發本機C ++ DLL。(點擊此處到達下部分內容)。基本步驟如下:
- 創建一個本機測試項目。測試項目與DLL項目位于同一解決方案中。
- 創建一個DLL項目。本演練將創建一個新的DLL,但是測試現有DLL的過程是相似的。
- 使DLL函數對測試可見。
- 迭代地擴充測試。建議一個“紅色-綠色-重構”循環,其中代碼的開發由測試主導。
- 調試失敗的測試。您可以在調試模式下運行測試。
- 重構,同時保持測試不變。重構意味著在不更改其外部行為的情況下改進代碼的結構。您可以這樣做以提高代碼的性能,可擴展性或可讀性。因為目的不是要更改行為,所以在對代碼進行重構更改時,請勿更改測試。這些測試有助于確保重構時不會引入錯誤。
- 檢查覆蓋范圍。當單元測試使用更多的代碼時,它們會更加有用。您可以發現測試已使用了代碼的哪些部分。
- 將單元與外部資源隔離。通常,DLL依賴于您正在開發的系統的其他組件,例如其他DLL,數據庫或遠程子系統。將每個單元與其依賴項隔離開來測試很有用。外部組件會使測試運行緩慢,在開發過程中,其他組件可能不完整。
創建一個本機單元測試項目
- 在“文件”菜單上,選擇“新建”>“項目”。
- Visual Studio 2017及更早版本:展開已安裝>模板> Visual C ++>測試。Visual Studio 2019:將語言設置為C ++,然后在搜索框中鍵入"測試''。
- 選擇本機單元測試項目模板,或您喜歡的任何已安裝框架。如果您選擇其他模板(例如Google Test或Boost.Test),則基本原理相同,盡管某些細節有所不同。
- 在本演練中,測試項目名為NativeRooterTest。
- 在新項目中,檢查unittest1.cpp。
注意:
- 通過使用TEST_METHOD(YourTestName){...}定義每個測試。 您不必編寫常規的函數簽名,簽名是由宏TEST_METHOD創建的。宏生成一個實例函數,該函數返回void。它還生成一個靜態函數,該函數返回有關測試方法的信息。該信息使測試瀏覽器可以找到該方法。
- 使用TEST_CLASS(YourClassName){...}將測試方法分組為類。 運行測試時,將創建每個測試類的實例。測試方法的調用順序不確定。您可以定義在每個模塊,類或方法之前和之后調用的特殊方法。
- 驗證測試是否在“測試資源管理器”中運行:
- 插入一些測試代碼:
TEST_METHOD(TestMethod1) { Assert::AreEqual(1,1); }
請注意,Assert類提供了幾種靜態方法,可用于驗證測試方法中的結果。
-
在“測試”菜單上,選擇“運行”>“所有測試”,測試生成并運行,出現“測試資源管理器”,該測試將顯示在“通過的測試”下。
創建一個DLL項目
以下步驟顯示如何在Visual Studio 2019中創建DLL項目。
- 使用Windows桌面向導創建C ++項目:在解決方案資源管理器中右鍵單擊解決方案名稱,然后選擇“添加”>“新建項目”。 將語言設置為C ++,然后在搜索框中鍵入“ windows”。 從結果列表中選擇Windows桌面向導。 在本演練中,該項目名為RootFinder。
-
按創建。在下一個對話框的“應用程序類型”下,選擇“動態鏈接庫(dll)”,然后選中“導出符號”。
導出符號選項會生成一個方便的宏,可用于聲明導出的方法。
- 在主體.h文件中聲明一個導出的函數:
聲明符__declspec(dllexport)使該類的公共成員和受保護成員在DLL外部可見。
- 在主體.cpp文件中,為該函數添加一個最小主體:
// Find the square root of a number. double CRootFinder::SquareRoot(double v) { return 0.0; }
將測試項目耦合到DLL項目
- 將DLL項目添加到測試項目的項目引用中:
- 在解決方案資源管理器中右鍵單擊測試項目節點,然后選擇“添加”>“引用”。
- 在“添加引用”對話框中,選擇DLL項目,然后選擇“添加”。
- 在主體單元測試.cpp文件中,包括DLL代碼的.h文件:
#include "..\RootFinder\RootFinder.h"
- 添加使用導出功能的基本測試:
TEST_METHOD(BasicTest) { CRootFinder rooter; Assert::AreEqual( // Expected value: 0.0, // Actual value: rooter.SquareRoot(0.0), // Tolerance: 0.01, // Message: L"Basic test failed", // Line number - used if there is no PDB file: LINE_INFO()); }
- 構建解決方案。 新測試將出現在“測試資源管理器”中。
- 在測試資源管理器中,選擇“全部運行”。
您已經設置了測試和代碼項目,并確認可以運行在代碼項目中運行功能的測試。現在您可以開始編寫實際的測試和代碼。
本文內容較多,分為上下兩部分進行介紹,(點擊此處到達下部分內容)。
想要購買Visual Studio正版授權,或了解更多產品信息請點擊