Junit 4.7 Rule:另一種斷言異常的方法(ExpectedException)
阿新 • • 發佈:2019-02-14
在Junit 4.7之後,加入了一種更容易斷言異常以及異常資訊的方法。
異常處理
//驗證丟擲異常類,以及錯誤資訊
public class TestException {
@Rule
public ExpectedException expectedEx = ExpectedException.none();
@Test
public void testValidationException() throws ValidationException {
//斷言會丟擲的異常,這句一定要在丟擲異常之前,否則當異常丟擲時,就會阻斷執行之後的語句。
expectedEx.expect(ValidationException.class);
//斷言得到的錯誤資訊內容。注意:斷言的資訊可以是原錯誤資訊的字串
expectedEx.expectMessage("is not passed");
throw new ValidationException("Password is not passed.");
}
}
//隨意定義一個異常類
class ValidationException extends Exception{
ValidationException(String msg){
super (msg);
}
}
expectMessage
expectedEx.expectMessage方法在斷言多種返回資訊時非常有用。例如當驗證密碼的時候,有時候可能會斷言一下兩種異常:
throw new ValidationException(“密碼必須包含字母和數字”);
throw new ValidationException(“密碼不能大於16位”);
注意事項
- @Rule 註解的 ExpectedException 變數宣告,它必須為 public
- @Test處,不能使用其他斷言方式,例如@Test(expected=ValidationException.class),否則不能測試通過,也就是
@Test(expected=ValidationException.class) 和測試方法中的
expectedEx.expectXxx() 方法是不能同時並存的 - 保證被測試的方法在expectedEx.expectXxx() 方法後面,不然也不能通過驗證
- expectedEx.expectMessage()中的引數可以是subString或Matcher,就是說斷言及可以是子字串,也可以是正則表示式