在 單元測驗(一):我的第一個單元測驗 中對結果為回傳值的方法進行了單元測驗,這篇文章撰寫一個沒有回傳值但改變了物件的狀態的測驗
一.在產品代碼中添加一個屬性并在判斷擴展名的方法中對該屬性做修改,灰色背景為修改的代碼,代碼如下:
1 public class FileVerify 2 { 3 public bool LastFileExtensionIsValid { get; set; } 4 5 public bool IsValidFileName(string filename) 6 { 7 LastFileExtensionIsValid = false;//change status 8 9 if (string.IsNullOrWhiteSpace(filename)) 10 { 11 throw new ArgumentException("filename has to be provided"); 12 } 13 if (filename.EndsWith(".txt", StringComparison.CurrentCultureIgnoreCase)) 14 { 15 LastFileExtensionIsValid = true;//change status 16 return true; 17 } 18 return false; 19 } 20 }
二.在測驗代碼中添加測驗
1 [TestCase("test.txt",true)] 2 [TestCase("test.too",false)] 3 public void IsValidFileName_WhenCalled_ChangeLastFileExtensionIsValid(string fileName,bool expected) 4 { 5 FileVerify fileVerify = MakFileVerify(); 6 7 fileVerify.IsValidFileName(fileName); 8 9 Assert.AreEqual(expected,fileVerify.LastFileExtensionIsValid); 10 }
使用了兩個TestCase來進行測驗,一個為正驗證,一個為反驗證,這樣才能確保測驗邏輯的完整性
TestCase在上篇文章中的一個引數對應測驗方法中的一個引數 該測驗中TestCase使用了兩個引數對應測驗方法的兩個引數 必須一一對應
命名問題:[作業單元]_[假設條件]_[預期行為]
作業單元:因需呼叫IsValidFileName方法,所以用該方法命名
假設條件:就是我們呼叫該方法的行為
預期行為:定義的屬性的值變化了
單元測驗中,測驗方法的命名需要遵守一定的規則,而且在整個專案中需要統一,這樣可讀性很高
三.介紹NUnit中的不常用的Attribute
[Ignore] 作用是忽略當前的測驗方法 使用場景:當前測驗的結果為失敗,但是需要將代碼提交到主分支 在可持續集成中,當有代碼提交時,代碼管理工具會先將所有的測驗都運行一遍,如果有失敗,那么該Attribute會派上用場,但是不建議使用,應該去解決測驗或產品代碼的問題
[SetUp] 測驗類中每個測驗運行完之前都會執行標注了該特性的方法
[TearDown] 測驗類中每個測驗運行完之后都會運行標注了該特性的方法
[TestFixtureSetUp] 測驗類中所有測驗運行之前執行
[TestFixtureTearDown] 測驗類中所有測驗運行完成后執行
其實在單元測驗可以倒逼我們寫出更好的產品代碼,比如方法命名規范、方法的職責單一!
如有錯誤之處,請指出!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/445897.html
標籤:其他
下一篇:開篇_Blog
