JUnit 5:如何断言异常被抛出?
2022-08-31 04:40:08
有没有更好的方法来断言一个方法在JUnit 5中引发异常?
目前,我必须使用@Rule来验证我的测试是否引发异常,但这不适用于我希望多个方法在测试中引发异常的情况。
有没有更好的方法来断言一个方法在JUnit 5中引发异常?
目前,我必须使用@Rule来验证我的测试是否引发异常,但这不适用于我希望多个方法在测试中引发异常的情况。
您可以使用 assertThrows(),
它允许您在同一测试中测试多个异常。由于在 Java 8 中支持 lambdas,这是在 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"));
}
在Java 8和JUnit 5(Jupiter)中,我们可以断言异常,如下所示。用org.junit.jupiter.api.Assertions.assertThrows
公共静态< T 扩展 Throwable > T assertThrows(类< T > expectedType, Executable executable)
断言执行提供的可执行文件会引发 expectedType 的异常并返回该异常。
如果未引发异常,或者如果引发不同类型的异常,则此方法将失败。
如果不想对异常实例执行其他检查,只需忽略返回值即可。
@Test
public void itShouldThrowNullPointerExceptionWhenBlahBlah() {
assertThrows(NullPointerException.class,
()->{
//do whatever you want to do here
//ex : objectName.thisMethodShoulThrowNullPointerExceptionForNullParameter(null);
});
}
该方法将使用 中的功能接口。Executable
org.junit.jupiter.api
指: