JUnit 5 でメソッドが例外をスローしたことをアサートするより良い方法はありますか?
現在、テストが例外をスローすることを確認するために @Rule を使用する必要がありますが、これは、テストで複数のメソッドが例外をスローすることが予想される場合には機能しません。
JUnit 5 でメソッドが例外をスローしたことをアサートするより良い方法はありますか?
現在、テストが例外をスローすることを確認するために @Rule を使用する必要がありますが、これは、テストで複数のメソッドが例外をスローすることが予想される場合には機能しません。
を使用するassertThrows()
と、同じテスト内で複数の例外をテストできます。Java 8 でのラムダのサポートにより、これは JUnit で例外をテストする標準的な方法です。
JUnitドキュメントごと:
import static org.junit.jupiter.api.Assertions.assertThrows;
@Test
void exceptionTesting() {
MyException thrown = assertThrows(
MyException.class,
() -> myObject.doThing(),
"Expected doThing() to throw, but it didn't"
);
assertTrue(thrown.getMessage().contains("Stuff"));
}
これはもっと簡単な例だと思います
List<String> emptyList = new ArrayList<>();
Optional<String> opt2 = emptyList.stream().findFirst();
assertThrows(NoSuchElementException.class, () -> opt2.get());
get()
空を含むオプションを呼び出すと、ArrayList
がスローされNoSuchElementException
ます。 assertThrows
予想される例外を宣言し、ラムダ サプライヤーを提供します (引数を取らず、値を返します)。
@prime の回答に感謝します。