针对状态的间接测试
定義? 基于狀態(tài)的測試(也稱狀態(tài)驗(yàn)證),是指在方法執(zhí)行之后,通過檢查被測系統(tǒng)及其協(xié)作者(依賴項(xiàng))的狀態(tài)來檢測該方法是否正確工作。
讓我們來看一個(gè)基于狀態(tài)測試的簡單例子,它使用LogAnalyzer類,然而,我們不能簡單地調(diào)用一個(gè)方法就完成測試。代碼清單2.3給出了該類的代碼。
代碼清單2.3? 通過調(diào)用IsValidLogFileName來測試屬性的值
從代碼中可以看出,LogAnalyzer記住了驗(yàn)證檢查的最終結(jié)果。因?yàn)檫壿嬌先Q于先有其他方法被調(diào)用,所以我們要測試此功能,不能只是簡單地寫一個(gè)測試,用它來取得一個(gè)方法的返回值,我們必須使用其他手段來檢測邏輯是否有問題。
首先,必須確定要測試的邏輯。是在新的屬性wasLastFileNameValid中嗎?不是的,是在IsValidLogFileName方法中,所以我們的測試名稱必須以這個(gè)方法開頭。代碼清單2.4給出了一個(gè)簡單測試,看其結(jié)果是否已記住。
代碼清單2.4? 通過調(diào)用方法并檢查其屬性值來測試一個(gè)類
請注意,我們是在被測代碼以外的地方做斷言來測試IsValidLogFileName方法功能的。
代碼清單2.5給出了另一個(gè)例子(我們將在第3章中再次用到)。在該例子中,查看一個(gè)內(nèi)置的內(nèi)存計(jì)算器功能。(參考本書的范例代碼Calculator.cs和CalculatorTests.cs。)
代碼清單2.5? Add()方法和Sum()方法
Calculator類的工作原理類似于大家了解并喜歡的袖珍計(jì)算器。輸入一個(gè)數(shù)字,然后按+,輸入另外一個(gè)數(shù)字,然后再按+,諸如此類。輸入結(jié)束時(shí),按=即可得到當(dāng)前的總和。
從哪里開始測試Sum()方法呢?應(yīng)該堅(jiān)持從最簡單的測試開始,比如測試Sum()默認(rèn)返回0。代碼清單2.6給出了以上做法。
代碼清單2.6? 針對Calculator的Sum()方法的最簡單測試
我們不能在調(diào)用Add()方法之前寫其他測試,所以我們下一個(gè)測試必須調(diào)用Add()并對Sum()返回的數(shù)值作斷言。代碼清單2.7給出了附有新測試方法的測試類。
代碼清單2.7? 兩個(gè)測試,其中第二個(gè)調(diào)用了Add()方法
請注意,這里的測試在[SetUp]相關(guān)的方法中初始化Calculator對象。這是個(gè)不錯(cuò)的想法,因?yàn)檫@樣可以節(jié)省寫測試的時(shí)間,使得代碼更 少,而且確保用同樣的方法來初始化Calculator。同樣,也有更好的測試維護(hù)性,如果改變Calculator的構(gòu)造函數(shù),只需在一個(gè)地方改變初始 化代碼,而無需在每個(gè)測試中都更改new調(diào)用。
到目前為止,一切都很好。但是如果被測方法依賴于外部資源又會怎樣呢?比如依賴于文件系統(tǒng)、數(shù)據(jù)庫、Web服務(wù)或者任何我們很難控制的其他東西。這正是我們開始新建測試樁對象(stub)、偽對象(fake)和模擬對象(mock)的時(shí)候,我們將在接下來幾章中討論到。轉(zhuǎn)載于:https://www.cnblogs.com/shihao/archive/2012/04/19/2456811.html
總結(jié)
- 上一篇: iPhone 15起步价多少?最贵的iP
- 下一篇: Activity四种加载模式