JUnitテスト異常

1739 ワード

次のクラスをテストする必要がある場合は、次の手順に従います.
public class Student {
  public boolean canVote(int age) {
      if (i<=0) throw new IllegalArgumentException("age should be +");
      if (i<18) return false;
      else return true;
  }
}

放出された異常をテストするには、次の3つの方法があります.
  • @Test ( expected = Throwable.class )
  • @Test(expected = IllegalArgumentException.class)
    public void canVoteExp() {
        Student student = new Student();
        student.canVote(0);
    }
    

    このテストには、例外がメソッドのある位置で投げ出されるが、特定の行にあるとは限らないため、誤差がある.
  • ExpectedException JUnitフレームワークのExpectedExceptionクラスを使用する場合は、ExpectedException例外を宣言する必要があります.

  • @Rule public ExpectedException thrown = ExpectedException.none();
    次に、予想される例外をより簡単に検証できます.
    @Test
    public void canVoteExp() {
        Student student = new Student();
        thrown.expect(IllegalArgumentException.class);
        student.canVote(0);
    }
    

    予期される例外のプロパティ情報を設定することもできます.
    @Test
    public void canVoteExp() {
        Student student = new Student();
        thrown.expect(IllegalArgumentException.class);
        thrown.expectMessage("age should be +");
        student.canVote(0);
    }
    

    この方法は異常放出の位置をより正確に見つけることができる.
  • try/catch with assert/fail JUnit 4以前のバージョンでtry/catch文ブロックを使用して異常
  • をチェック
    @Test
    public void canVoteExp() {
        Student student = new Student();
        try {
            student.canVote(0);
        } catch (IllegalArgumentException e) {
            assertThat(e.getMessage(), containsString("age should be +"));
        }
        fail("expected IllegalArgumentException for non + age");
    }
    

    この方法は古くなったが,非常に有効である.主な欠点はcatch文ブロックの後にfail()を書く方法を忘れやすいことであり,異常が投げ出されなければ情報の誤報を招くと予想される.