翻譯|使用教程|編輯:況魚杰|2020-04-02 15:33:21.040|閱讀 453 次
概述:本演練介紹如何使用測試優先方法開發本機C ++ DLL。本教程內容比較多,分為兩部分進行,此為下部分。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
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()); } } }
#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;
提示:一組好的單元測試使您確信更改代碼時沒有引入錯誤。保持重構與其他更改分開。
下一步
本文內容到這里就結束了,點擊此處可以查看上部分內容。
想要購買Visual Studio正版授權,或了解更多產品信息請點擊
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: