Java 如何测试是否在代码路径中引发和处理异常?

Java 如何测试是否在代码路径中引发和处理异常?,java,junit,junit5,Java,Junit,Junit5,我正在编写一个集成测试(不是模拟单元测试),以检查用户没有足够权限访问aws资源(比如S3 bucket)的用例的行为 下面是代码的外观: MyService svcClient = new MyService(permissions); 上面的行使用所有异常(例如,拒绝访问S3-S3Exception,返回空对象) 虽然我可以用以下方法测试行为 Assertions.assertThrows( NullPointerException.class, () -> svcClient.me

我正在编写一个集成测试(不是模拟单元测试),以检查用户没有足够权限访问aws资源(比如S3 bucket)的用例的行为

下面是代码的外观:

MyService svcClient = new MyService(permissions);
上面的行使用所有异常(例如,拒绝访问S3-S3Exception,返回空对象)

虽然我可以用以下方法测试行为

Assertions.assertThrows( NullPointerException.class, () -> svcClient.methodCall());
我无法表示有一个特殊的异常,如S3Exception,它是在消息访问被拒绝时引发的

问题:
  • 如何测试是否引发了特定异常,以及 在代码路径中处理/消耗

  • 如果没有办法,在集成过程中是否通常超出范围 测试来测试这种行为,它是否属于行为学 测试


  • 非常感谢这里的指导。谢谢。

    除非您显示
    MySingletonClass
    代码,否则很难回答。此外,在您的情况下,如果您可以在
    MySingletonClass
    类中的另一个方法中处理异常并对所有这些异常进行测试,那么单元测试就更容易了。这个问题与它的单例是否独立无关或者不是。我将更改问题的内容,使其更通用。您可以通过使用assertJ库断言自定义异常来实现这一点。这就是您要问的吗?不是。自定义异常是您所指的模拟异常。这是通过JUnit生成的集成测试,我无法模拟任何代码行,其中表示方法被称为模拟行为以引发特定的异常。除非您显示
    MySingletonClass
    代码,否则很难回答。此外,在您的情况下,如果您可以在
    MySingletonClass
    类中的另一个方法中处理异常并对所有这些异常进行测试,那么单元测试就更容易了。问题与我是否ts singleton与否。我将更改问题的内容,使其更通用。您可以通过使用assertJ库断言自定义异常来实现这一点。这就是您要问的问题吗?不。自定义异常是您所引用的模拟异常。这是通过JUnit生成的集成测试,我无法模拟任何代码行当调用模拟行为以引发特定异常时,正在初始化。