1. 程式人生 > >Junit 4.7 Rule:另一種斷言異常的方法(ExpectedException)

Junit 4.7 Rule:另一種斷言異常的方法(ExpectedException)

在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位”);

注意事項

  1. @Rule 註解的 ExpectedException 變數宣告,它必須為 public
  2. @Test處,不能使用其他斷言方式,例如@Test(expected=ValidationException.class),否則不能測試通過,也就是
    @Test(expected=ValidationException.class) 和測試方法中的
    expectedEx.expectXxx() 方法是不能同時並存的
  3. 保證被測試的方法在expectedEx.expectXxx() 方法後面,不然也不能通過驗證
  4. expectedEx.expectMessage()中的引數可以是subString或Matcher,就是說斷言及可以是子字串,也可以是正則表示式