更新: JUnit5では、例外テストが改善されていますassertThrows
。
次の例は、Junit 5ユーザーガイドからのものです
@Test
void exceptionTesting() {
Throwable exception = assertThrows(IllegalArgumentException.class, () ->
{
throw new IllegalArgumentException("a message");
});
assertEquals("a message", exception.getMessage());
}
JUnit 4を使用した元の回答。
例外がスローされたことをテストする方法はいくつかあります。以下のオプションについても投稿しました。JUnitを使用して優れた単体テストを作成する方法
expected
パラメータを設定します@Test(expected = FileNotFoundException.class)
。
@Test(expected = FileNotFoundException.class)
public void testReadFile() {
myClass.readFile("test.txt");
}
使用する try
catch
public void testReadFile() {
try {
myClass.readFile("test.txt");
fail("Expected a FileNotFoundException to be thrown");
} catch (FileNotFoundException e) {
assertThat(e.getMessage(), is("The file test.txt does not exist!"));
}
}
ExpectedException
ルールによるテスト。
@Rule
public ExpectedException thrown = ExpectedException.none();
@Test
public void testReadFile() throws FileNotFoundException {
thrown.expect(FileNotFoundException.class);
thrown.expectMessage(startsWith("The file test.txt"));
myClass.readFile("test.txt");
}
例外テストの詳細については、JUnit4 wikiの例外テストとbad.robot-Expecting Exceptions JUnit Ruleを参照してください。
org.mockito.Mockito.verify
例外がスローされる前に、特定のことが発生したこと(ロガーサービスが正しいパラメーターで呼び出されたなど)を確認するために、引き続きさまざまなパラメーターを使用して呼び出したいことがよくあります。