Visual Studio 使用教程:如何編寫C ++ DLL的單元測試(下)
Visual Studio是功能完備的 IDE,可用于編碼、調(diào)試、測試和部署到任何平臺,Visual Studio使用 .NET 開發(fā) iOS、Android 和 Web 應(yīng)用和游戲。
本演練介紹如何使用測試優(yōu)先方法開發(fā)本機(jī)C ++ DLL。本教程內(nèi)容比較多,分為兩部分進(jìn)行,此為下部分(點(diǎn)擊此處到底上部分內(nèi)容)。
反復(fù)擴(kuò)大測試并使它們通過
- 添加一個新測試:
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); } }注意:建議您不要更改已通過的測試。而是添加一個新測試,更新代碼以使該測試通過,然后添加另一個測試,依此類推。
當(dāng)用戶更改要求時,請禁用不再正確的測試。編寫新的測試,并使它們一次以相同的增量方式工作。
- 生成解決方案,然后在“測試資源管理器”中,選擇“全部運(yùn)行”。新測試失敗。
提示:編寫每個測試后,請驗(yàn)證每個測試均立即失敗。這可以幫助您避免編寫永遠(yuǎn)不會失敗的測試的簡單錯誤。
增強(qiáng)您的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; }
- 生成解決方案,然后在“測試資源管理器”中,選擇“全部運(yùn)行”。兩項(xiàng)測試均通過。
提示:通過一次添加一個測試來開發(fā)代碼。 確保每次迭代后所有測試均通過。
調(diào)試失敗的測試
- 添加另一個測試:
#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,打開(或雙擊)失敗的測試,失敗的語句將突出顯示。故障消息在“測試資源管理器”的詳細(xì)信息窗格中可見。
- 要查看測試失敗的原因,請逐步執(zhí)行以下功能:
- 在SquareRoot函數(shù)的開始處設(shè)置一個斷點(diǎn)。
- 在失敗的測試的快捷菜單上,選擇“調(diào)試選定的測試”。
- 當(dāng)運(yùn)行在斷點(diǎn)處停止時,逐步執(zhí)行代碼。
- 在要開發(fā)的函數(shù)中插入代碼:
#include... double CRootFinder::SquareRoot(double v) { // Validate parameter: if (v < 0.0) { throw std::out_of_range("Can't do square roots of negatives"); }
現(xiàn)在所有測試都通過了。
提示:如果單個測試沒有依賴項(xiàng),從而不能以任何順序運(yùn)行它們,請在工具欄的設(shè)置菜單中打開并行測試執(zhí)行。這樣可以顯著減少運(yùn)行所有測試所需的時間。
重構(gòu)代碼而不更改測試
- 簡化平方根函數(shù)中的中央計算:
// old code: // result = result - (result*result - v)/(2*result); // new code: result = (result + v/result)/2.0;
- 生成解決方案并選擇“全部運(yùn)行”,以確保您沒有引入錯誤。
提示:一組好的單元測試使您確信更改代碼時沒有引入錯誤。保持重構(gòu)與其他更改分開。
下一步
- 隔離。大多數(shù)DLL依賴于其他子系統(tǒng),例如數(shù)據(jù)庫和其他DLL,這些其他組件通常是并行開發(fā)的。為了允許在其他組件尚不可用時執(zhí)行單元測試,您必須替換模擬。
- 建立驗(yàn)證測試。您可以按設(shè)置的時間間隔在團(tuán)隊的構(gòu)建服務(wù)器上執(zhí)行測試。這樣可以確保在整合多個團(tuán)隊成員的工作時不會引入錯誤。
- 簽入測試。您可以要求在每個團(tuán)隊成員將代碼檢入源代碼管理之前執(zhí)行一些測試。通常,這是一組完整的構(gòu)建驗(yàn)證測試的子集。
- 您還可以要求最低級別的代碼覆蓋率。
本文內(nèi)容到這里就結(jié)束了,點(diǎn)擊此處可以查看上部分內(nèi)容。
想要購買Visual Studio正版授權(quán),或了解更多產(chǎn)品信息請點(diǎn)擊【咨詢在線客服】