有没有更好的方法来断言方法在 JUnit 5 中引发异常?
目前,我必须使用@Rule 来验证我的测试是否引发了异常,但这不适用于我希望多个方法在我的测试中引发异常的情况。
原文由 steventrouble 发布,翻译遵循 CC BY-SA 4.0 许可协议
有没有更好的方法来断言方法在 JUnit 5 中引发异常?
目前,我必须使用@Rule 来验证我的测试是否引发了异常,但这不适用于我希望多个方法在我的测试中引发异常的情况。
原文由 steventrouble 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 Java 8 和 JUnit 5 (Jupiter) 中,我们可以如下断言异常。使用 org.junit.jupiter.api.Assertions.assertThrows
public static < T extends Throwable > T assertThrows(Class< 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
。
参考 :
原文由 prime 发布,翻译遵循 CC BY-SA 3.0 许可协议
8 回答6.6k 阅读
4 回答717 阅读✓ 已解决
2 回答3.4k 阅读
3 回答1.9k 阅读✓ 已解决
1 回答2.2k 阅读✓ 已解决
1 回答2.1k 阅读✓ 已解决
1 回答974 阅读✓ 已解决
您可以使用
assertThrows()
,它允许您在同一个测试中测试多个异常。在 Java 8 中支持 lambda,这是在 JUnit 中测试异常的规范方法。根据 JUnit 文档: