JUnit框架功能詳細(Rule、Assume、Assert)——JUnit學習(二)
轉載網址http://my.oschina.net/pangyangyang/blog/146015
Rule
JUnit4中包含兩個註解@Rule和@ClassRule用於修飾Field或返回Rule的Method,Rule是一組實現了TestRule介面的共享類,提供了驗證、監視TestCase和外部資源管理等能力。JUnit提供了以下幾個Rule實現,必要時也可以自己實現Rule。- Verifier: 驗證測試執行結果的正確性。
- ErrorCollector: 收集測試方法中出現的錯誤資訊,測試不會中斷,如果有錯誤發生測試結束後會標記失敗。
- ExpectedException: 提供靈活的異常驗證功能。
- Timeout: 用於測試超時的Rule。
- ExternalResource: 外部資源管理。
- TemporaryFolder: 在JUnit的測試執行前後,建立和刪除新的臨時目錄。
- TestWatcher: 監視測試方法生命週期的各個階段。
- TestName: 在測試方法執行過程中提供獲取測試名字的能力。
Verifier
ErrorCollector: 繼承自Verifier。用於Test Method執行過程中收集錯誤,不會中斷Test Method的執行,如果捕獲到錯誤會最終導致測試失敗。個人感覺ErrorCollector的用途比較有限,因為收集錯誤的程式碼都比較複雜不是很實用,一些特殊場景(測試方法很複雜、存在多項測試並且啟動測試的開銷比較大)可能使用到。ErrorCollector提供的收集方法有三個:
- collector.addError(Throwable):這是最簡單的收集方式,可以用在try...catch中,記錄發生的錯誤。
- collector.checkSucceeds(Callable<Object>()):支援呼叫callable的call方法,是同步的。一旦Callable丟擲異常ErrorCollector會記錄並最終導致失敗。
- collector.checkThat(T value, Matcher<T> matcher):測試value是否匹配Matcher,如果不匹配會記錄matcher提供的錯誤資訊。
ExpectedException:異常測試,在上一篇文章中介紹的@Test(expected=xxx)用法本質就是利用了這個Rule。相比之前的用法ExpectedException提供了靈活匹配規則,可以根據message、cause和異常的具體型別匹配。以下程式碼分別測試了message、異常型別和cause匹配:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
public
class
ExpectedExceptionTest
{
@Rule
public
ExpectedException exp = ExpectedException.none();
@Test
public
void
expectException()
{
exp.expect(IndexOutOfBoundsException. class );
throw
new
IndexOutOfBoundsException( "Exception
method." );
}
@Test
public
void
expectMessage()
{
exp.expectMessage( "Hello
World" );
throw
|