文檔金喜正規買球>>Visual Studio系列教程>>Visual Studio 使用教程:如何編寫C ++ DLL的單元測試(下)
Visual Studio 使用教程:如何編寫C ++ DLL的單元測試(下)
Visual Studio是功能完備的 IDE,可用于編碼、調試、測試和部署到任何平臺,Visual Studio使用 .NET 開發 iOS、Android 和 Web 應用和游戲。
本演練介紹如何使用測試優先方法開發本機C ++ DLL。本教程內容比較多,分為兩部分進行,此為下部分(點擊此處到底上部分內容)。
反復擴大測試并使它們通過
- 添加一個新測試:
TEST_METHOD(RangeTest) { CRootFinder rooter; for (double v = 1e-6; v < 1e6; v = v * 3.2) { double actual = rooter.SquareRoot(v*v); Assert::AreEqual(v, actual, v/1000); } }注意:建議您不要更改已通過的測試。而是添加一個新測試,更新代碼以使該測試通過,然后添加另一個測試,依此類推。
當用戶更改要求時,請禁用不再正確的測試。編寫新的測試,并使它們一次以相同的增量方式工作。
- 生成解決方案,然后在“測試資源管理器”中,選擇“全部運行”。新測試失敗。
提示:編寫每個測試后,請驗證每個測試均立即失敗。這可以幫助您避免編寫永遠不會失敗的測試的簡單錯誤。
增強您的DLL代碼,以便新測試通過:
#include... double CRootFinder::SquareRoot(double v) { double result = v; double diff = v; while (diff > result/1000) { double oldResult = result; result = result - (result*result - v)/(2*result); diff = abs (oldResult - result); } return result; }
- 生成解決方案,然后在“測試資源管理器”中,選擇“全部運行”。兩項測試均通過。
提示:通過一次添加一個測試來開發代碼。 確保每次迭代后所有測試均通過。
調試失敗的測試
- 添加另一個測試:
#include... // Verify that negative inputs throw an exception. TEST_METHOD(NegativeRangeTest) { wchar_t message[200]; CRootFinder rooter; for (double v = -0.1; v > -3.0; v = v - 0.5) { try { // Should raise an exception: double result = rooter.SquareRoot(v); _swprintf(message, L"No exception for input %g", v); Assert::Fail(message, LINE_INFO()); } catch (std::out_of_range ex) { continue; // Correct exception. } catch (...) { _swprintf(message, L"Incorrect exception for %g", v); Assert::Fail(message, LINE_INFO()); } } }
- 生成解決方案并選擇Run All,打開(或雙擊)失敗的測試,失敗的語句將突出顯示。故障消息在“測試資源管理器”的詳細信息窗格中可見。
- 要查看測試失敗的原因,請逐步執行以下功能:
- 在SquareRoot函數的開始處設置一個斷點。
- 在失敗的測試的快捷菜單上,選擇“調試選定的測試”。
- 當運行在斷點處停止時,逐步執行代碼。
- 在要開發的函數中插入代碼:
#include... double CRootFinder::SquareRoot(double v) { // Validate parameter: if (v < 0.0) { throw std::out_of_range("Can't do square roots of negatives"); }
現在所有測試都通過了。
提示:如果單個測試沒有依賴項,從而不能以任何順序運行它們,請在工具欄的設置菜單中打開并行測試執行。這樣可以顯著減少運行所有測試所需的時間。
重構代碼而不更改測試
- 簡化平方根函數中的中央計算:
// old code: // result = result - (result*result - v)/(2*result); // new code: result = (result + v/result)/2.0;
- 生成解決方案并選擇“全部運行”,以確保您沒有引入錯誤。
提示:一組好的單元測試使您確信更改代碼時沒有引入錯誤。保持重構與其他更改分開。
下一步
- 隔離。大多數DLL依賴于其他子系統,例如數據庫和其他DLL,這些其他組件通常是并行開發的。為了允許在其他組件尚不可用時執行單元測試,您必須替換模擬。
- 建立驗證測試。您可以按設置的時間間隔在團隊的構建服務器上執行測試。這樣可以確保在整合多個團隊成員的工作時不會引入錯誤。
- 簽入測試。您可以要求在每個團隊成員將代碼檢入源代碼管理之前執行一些測試。通常,這是一組完整的構建驗證測試的子集。
- 您還可以要求最低級別的代碼覆蓋率。
本文內容到這里就結束了,點擊此處可以查看上部分內容。
想要購買Visual Studio正版授權,或了解更多產品信息請點擊