假設機制(Assumption)
理想情況下寫測試用例的開發人員可以明確的知道所有導致他們所寫的測試用例不通過的地方但是有的時候這些導致測試用例不通過的地方並不是很容易的被發現可能隱藏得很深從而導致開發人員在寫測試用例時很難預測到這些因素而且往往這些因素並不是開發人員當初設計測試用例時真正目的他們的測試點是希望測試出被測代碼中別的出錯地方
比如一個測試用例運行的 locale(如LocaleUS)與之前開發人員設計該測試用例時所設想的不同(如LocaleUK)這樣會導致測試不通過但是這可能並不是開發人員之前設計測試用例時所設想的測試出來的有用的失敗結果(測試點並不是此比如測試的真正目的是想判斷函數的返回值是否為 true返回 false 則測試失敗)這時開發人員可以通過編寫一些額外的代碼來消除這些影響(比如將 locale 作為參數傳入到測試用例中每次運行測試用例時明確指定 locale)但是花費時間和精力來編寫這些不是測試用例根本目的的額外代碼其實是種浪費這時就可以使用 Assumption 假設機制來輕松達到額外代碼的目的編寫該測試用例時首先假設 locale 必須是 LocaleUK如果運行時 locale 是 LocaleUK則繼續執行該測試用例函數如果是其它的 locale則跳過該測試用例函數執行該測試用例函數以外的代碼這樣就不會因為 locale 的問題導致測試出錯
JUnit 結合 Hamcrest 庫提供了 assumeThat 語句開發人員可以使用其配合匹配符 Matcher 設計所有的假設條件(語法和 assertThat 一樣)同樣為了方便使用JUnit 還專門提供了 assumeTrueassumeNotNull 和 assumeNoException 語句
假設機制(Assumption)的優點
優點 通過對 runtime 變量進行取值假設從而不會因為一個測試用例的不通過而導致整個測試失敗而中斷(the test passes)使得測試更加連貫
開發人員編寫單元測試時經常會在一個測試中包含若干個測試用例函數這時若是遇到某個測試用例函數不通過整個單元測試就會終止這將導致測試不連貫因為開發人員往往希望一次能運行多個測試用例函數不通過的測試用例函數不要影響到剩下的測試用例函數的運行否則會給 debug 調試帶來很大的難度
開發人員編寫單元測試時有時是預測不了傳入到單元測試方法中的變量值的而且這些值有時並不是開發人員所期望的因為他們會導致測試用例不通過並中斷整個測試所以開發人員需要跳過這些導致測試用例函數不通過的異常情況
清單 假設機制優點 舉例
//@Test 注釋表明接下來的函數是 JUnit 及其以後版本的測試用例函數
@Test
public void testAssumptions() {
//假設進入testAssumptions時變量i的值為如果該假設不滿足程序不會執行assumeThat後面的語句
assumeThat( i is() );
//如果之前的假設成立會打印assumption is true!到控制台否則直接調出執行下一個測試用例函數
Systemoutprintln( assumption is true! );
}
優點 利用假設可以控制某個測試用例的運行時間讓其在自己期望的時候運行(run at a given time)
[] [] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/Java/ky/201311/29100.html