JUnit 5:如何断言抛出异常?

新手上路,请多包涵

有没有更好的方法来断言方法在 JUnit 5 中引发异常?

目前,我必须使用@Rule 来验证我的测试是否引发了异常,但这不适用于我希望多个方法在我的测试中引发异常的情况。

原文由 steventrouble 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.3k
2 个回答

您可以使用 assertThrows() ,它允许您在同一个测试中测试多个异常。在 Java 8 中支持 lambda,这是在 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"));
}

原文由 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题