翻譯|使用教程|編輯:況魚杰|2020-03-18 10:19:58.430|閱讀 382 次
概述:本文將逐步指導您使用用于托管代碼的Microsoft單元測試框架和Visual Studio Test Explorer創建,運行和自定義一系列單元測試。您從正在開發的C#項目開始,創建執行其代碼的測試,運行測試并檢查結果。然后,您更改項目代碼并重新運行測試。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
Visual Studio 是功能完備的 IDE,可用于編碼、調試、測試和部署到任何平臺,Visual Studio使用 .NET 開發 iOS、Android 和 Web 應用和游戲。
本文將逐步指導您使用用于托管代碼的Microsoft單元測試框架和Visual Studio Test Explorer創建,運行和自定義一系列單元測試。您從正在開發的C#項目開始,創建執行其代碼的測試,運行測試并檢查結果。然后,您更改項目代碼并重新運行測試。
構建并運行測試
修正您的代碼并重新運行測試
測試結果包含描述失敗的消息。對于AreEqual方法,該消息顯示預期的結果和實際接收的結果。您預計余額會減少,但是取款額卻增加了。
單元測試發現一個錯誤:提款金額應在應扣除的情況下添加到帳戶余額中。
更正錯誤
要更正此錯誤,請在BankAccount.cs文件中替換以下行:
m_balance += amount;和:
m_balance -= amount;
重新運行測試
在“測試資源管理器”中,選擇“全部運行”以重新運行測試。 紅色/綠色條變為綠色表示測試通過。
使用單元測試來改進代碼
本節描述了迭代的分析,單元測試開發和重構過程如何幫助您使生產代碼更健壯和有效。
分析問題
您已經創建了一種測試方法,以確認在借方方法中正確扣除了有效金額。 現在,如果借方金額為以下任一,則驗證方法是否拋出ArgumentOutOfRangeException:
創建并運行新的測試方法
創建一種測試方法以在借方金額小于零時驗證正確的行為:
[TestMethod] public void Debit_WhenAmountIsLessThanZero_ShouldThrowArgumentOutOfRange() { // Arrange double beginningBalance = 11.99; double debitAmount = -100.00; BankAccount account = new BankAccount("Mr. Bryan Walton", beginningBalance); // Act and assert Assert.ThrowsException<System.ArgumentOutOfRangeException>(() => account.Debit(debitAmount)); }
使用ThrowsException方法斷言已引發正確的異常。除非引發ArgumentOutOfRangeException,否則此方法將導致測試失敗。如果您在借方金額小于零時臨時修改被測方法以引發更通用的ApplicationException,則該測試將正常運行-即它將失敗。
要測試提取的金額大于余額的情況,請執行以下步驟:
運行兩個測試并驗證它們是否通過。
繼續分析
被測試的方法可以進一步改進。 在當前的實現中,我們無法知道是哪個條件(金額> m_balance或金額<0)導致測試期間引發異常。 我們只知道ArgumentOutOfRangeException被拋出了方法中。 如果我們能說出BankAccount.Debit中的哪個條件引發了異常(金額> m_balance或金額<0),那會更好,因此可以確信我們的方法可以正確地檢查其參數。
再次查看正在測試的方法(BankAccount.Debit),請注意,兩個條件語句都使用ArgumentOutOfRangeException構造函數,該構造函數僅將參數名稱作為參數:
throw new ArgumentOutOfRangeException("amount");
您可以使用一個構造函數來報告更豐富的信息:ArgumentOutOfRangeException(String,Object,String)包括參數名稱,參數值和用戶定義的消息。 您可以重構被測方法以使用此構造函數。 更好的是,您可以使用公開可用的類型成員來指定錯誤。
重構被測代碼
首先,在類范圍內為錯誤消息定義兩個常量。 將它們放在接受測試的班級BankAccount中:public const string DebitAmountExceedsBalanceMessage = "Debit amount exceeds balance"; public const string DebitAmountLessThanZeroMessage = "Debit amount is less than zero";然后,在Debit方法中修改兩個條件語句:
if (amount > m_balance) { throw new System.ArgumentOutOfRangeException("amount", amount, DebitAmountExceedsBalanceMessage); } if (amount < 0) { throw new System.ArgumentOutOfRangeException("amount", amount, DebitAmountLessThanZeroMessage); }
重構測試方法
通過刪除對Assert.ThrowsException的調用來重構測試方法。 將對Debit()的調用包裝在try / catch塊中,捕獲預期的特定異常,并驗證其關聯消息。 StringAssert.Contains方法提供了比較兩個字符串的功能。
現在,Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange可能看起來像這樣:
[TestMethod] public void Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange() { // Arrange double beginningBalance = 11.99; double debitAmount = 20.0; BankAccount account = new BankAccount("Mr. Bryan Walton", beginningBalance); // Act try { account.Debit(debitAmount); } catch (System.ArgumentOutOfRangeException e) { // Assert StringAssert.Contains(e.Message, BankAccount.DebitAmountExceedsBalanceMessage); } }
重新測試,重寫和重新分析
假設正在測試的方法中存在一個錯誤,并且Debit方法甚至不會拋出ArgumentOutOfRangeException,別介意輸出帶有異常的正確消息。目前,測試方法無法處理這種情況。如果debitAmount值有效(即小于余額且大于零),則不會捕獲任何異常,因此不會觸發斷言。然而,測試方法通過了,這是不正常的,因為如果沒有拋出異常,測試方法將失敗。
這是測試方法中的錯誤。要解決此問題,請在測試方法的末尾添加Fail斷言,以處理沒有引發異常的情況。
重新運行測試表明,如果捕獲到正確的異常,則測試現在將失敗。catch塊捕獲異常,但是該方法繼續執行,并且在新的Fail斷言處失敗。若要解決此問題,在catch塊中的StringAssert之后添加return語句。 重新運行測試可以確認您已解決此問題。 Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange的最終版本如下所示:
[TestMethod] public void Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange() { // Arrange double beginningBalance = 11.99; double debitAmount = 20.0; BankAccount account = new BankAccount("Mr. Bryan Walton", beginningBalance); // Act try { account.Debit(debitAmount); } catch (System.ArgumentOutOfRangeException e) { // Assert StringAssert.Contains(e.Message, BankAccount.DebitAmountExceedsBalanceMessage); return; } Assert.Fail("The expected exception was not thrown."); }
結論
測試代碼的改進導致了更健壯和信息量更大的測試方法。但更重要的是,他們還改進了受測代碼。
注意:本文內容將Microsoft單元測試框架用于托管代碼。Test Explorer還可以從具有Test Explorer適配器的第三方單元測試框架中運行測試。
本文內容篇幅較長,分為上下兩篇,點擊可查看上篇>>
喜歡該產品的朋友可以點擊下載Visual Studio試用版免費體驗~
想要購買Visual Studio正版授權,或了解更多產品信息請點擊
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: