JUnitのExceptionテスト

テストを実行したとき、例外が発生するかを確認する方法を紹介します。

Annotationを使った方法

Annotationを利用して、Exceptionが発生していることをテストすることができます。 @Test(expected = Exception)のようにコードを実行したときに期待されるExceptionを明示ください。 次のコードでは、NullPointerExceptionが発生した場合、テストはパスし、発生しない場合に失敗します。

@Test(expected = NullPointerException.class)
public void testExceptionThrown() {
    String str = null;

    str.contains("a");
}

ExpectedException Ruleを使用した方法

ExpectedExceptionというRuleを利用して、Exceptionが発生されるかをテストすることができます。

下のテストで、NullPointerExceptionが発生した場合、テストはパスします。 expect()メソッドに発生すると予想されるExceptionを明示します。

@Rule
public ExpectedException exceptionRule = ExpectedException.none();

@Test
public void testExceptionThrown() {
    exceptionRule.expect(NullPointerException.class);

    String str = null;
    str.contains("a");
}

例外のメッセージ内容を確認する

上記のコードでは、NullPointerExceptionが発生した場合、テストはパスするが、私は期待したコードでExceptionが発生した保証することは困難もあります。 このような場合には、Exceptionのメッセージの内容まで確認すると、より正確にテストすることができます。

次のコードでは、NullPointerExceptionのメッセージが "Null object is invoked"場合にのみ、テストがパスします。

@Rule
public ExpectedException exceptionRule = ExpectedException.none();

@Test
public void testExceptionThrown2() {
    exceptionRule.expect(NullPointerException.class);
    exceptionRule.expectMessage("Null object is invoked");

    throw new NullPointerException("Null object is invoked");
}

もし下記のように、他のメッセージのNullPointerExceptionが発生した場合、テストは失敗します。

@Test
public void testExceptionThrown2() {
    exceptionRule.expect(NullPointerException.class);
    exceptionRule.expectMessage("Null object is invoked");

    throw new NullPointerException("Null object");
}

失敗メッセージは、次のようになります。

java.lang.AssertionError:
Expected: (an instance of java.lang.NullPointerException and exception with message a string containing "Null object is invoked")
     but: exception with message a string containing "Null object is invoked" message was "Null object"

try-catchを使った方法

以下のように、try-catchを使用して、例外が発生するかをテストすることができます。例外が発生すると、catchに移動するので、 fail()が呼び出されず、テストはパスします。 もしExceptionが発生していなかった場合、 fail()が呼び出され、テストは失敗します。

@Test
public void testExceptionThrown3() {
    try {
        String str = null;
        str.contains("a");

        fail();
    } catch (NullPointerException e) {
        // pass
    }
}

Related Posts

codechachaCopyright ©2019 codechacha