清單 假設機制優點 舉例
@Test
//測試用例函數veryLongTest()執行需要很長時間所以開發人員不是每次都想運行它可以通過判斷是否定義了
//DEV環境變量來選擇性地執行該測試用例
public void veryLongTest() throws Exception {
//假設環境變量DEV為空即如果之前通過SystemsetProperty定義過DEV環境變量(不為空)則自動跳過
//veryLongTest中假設後剩下的語句去執行下一個JUnit測試用例否則執行假設後接下來的語句
assumeThat( SystemgetProperty( DEV ) nullValue() );
Systemoutprintln(running a long test);
Threadsleep( * );
}
如何使用 Assumption 假設機制
開發人員可以使用 assumeThat 並配合 hamcrest 的匹配符 Matcher對即將被傳入到單元測試用例函數中的 runtime 變量值做精確的假設如果假設不正確(即當前 runtime 變量的取值不滿足所假設的條件)則不會將該變量傳給該測試用例中假設後面的語句即程序會從該 assumeThat 所在的 @Test 測試函數中直接自動跳出(test automatically quietly passesvalues that violate assumptions are quietly ignored)去執行下一個 @Test 函數使得本來會中斷的測試現在不會中斷
使用假設機制必須得注意以下幾點
由於 JUnit 引用了 Hamcrest 匹配符庫所以使用 assumeThat 就可以編寫所有的假設語句但是為了方便使用JUnit 除 assumeThat 之外還提供了 assumeTrueassumeNotNull 和 assumeNoException 語句 要使用 assume* 假設語句必須得 import static orgjunitAssume*; 如果引用了第三方 hamcrest 的匹配符庫必須得 import static orghamcrestMatchers*;如果引用 JUnit 自帶的匹配符庫需要 import static orghamcrestCoreMatchers*;
清單 假設機制使用舉例
例
@Test
public void filenameIncludesString() {
//如果文件分隔符不是
/
(forward slash)
則不執行assertThat斷言測試
直接跳過該測試用例函數
assumeThat(File
separatorChar
is(
/
));
//判斷文件名fileName是否含有字符串
developerWorks
assertThat( fileName
containsString(
developerWorks
) );
}
例
@Test
public void filenameIncludesString() {
//bugFixed不是JUnit
的函數
是開發人員自己工程中定義的函數
表示判斷指定的defect是否
//被修正了
如果被修正
則返回true
否則返回false
這裡假設缺陷
被修正後才進行余下單元測試
assumeTrue( bugFixed(
) );
//判斷文件名fileName是否含有字符串
developerWorks
assertThat( fileName
containsString(
developerWorks
) );
}
理論機制(Theory)
為什麼要引用理論機制(Theory)
當今軟件開發中測試驅動開發(TDD — Testdriven development)越發流行為什麼 TDD 會如此流行呢?因為它確實擁有很多優點它允許開發人員通過簡單的例子來指定和表明他們代碼的行為意圖
[] [] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/Java/ky/201311/29101.html