关于java:在JUnit测试方法中测试包装的预期异常

Test wrapped expected exception inside a JUnit test method

我想测试在JUnit测试方法的某个部分中将EOFException作为异常原因抛出某个异常。

测试方法本身不应该抛出异常 - 只是它的一个特定部分。

我完成它:

1
2
3
4
5
6
7
8
...
try {
    MyClass.staticMethod();
} catch (MyException e) {
    Assert.assertEquals(e.getCause().getClass(), EOFException.class);
}
...
// other asserts

我想知道这是否是这种情况下的最佳实践,或者有更好的方法来实现这一点,也许有一些特定于异常的JUnit机制(我读了ExpectedException但我理解它是用于处理抛出异常的测试方法)。


catch-exception库的第2版(当前处于dev模式)允许您使用Lambda表达式,因此您也可以使用静态方法调用。

1
2
3
catchException(() ->  MyClass.staticMethod());

assert caughtException() instanceof EOFException;


您可以使用Fishbowl库。

1
2
3
4
5
...
Throwable e = exceptionThrownBy(() -> MyClass.staticMethod())
Assert.assertEquals(e.getCause().getClass(), EOFException.class);
...
//other asserts