我需要断言CustomException
是从一个私有实用程序方法doSomething
抛出的
这是我迄今为止实施的,并且正在发挥作用。
在测试类级别定义规则@Rule
public ExpectedException exception = ExpectedException.none();
试验方法的相关部分
exception.expect(CustomException.class);
// prepare call to executePrivateMethod
try {
executePrivateMethod(objInstance, "doSomething",
arg0, arg1);
} catch (InvocationTargetException e) {
Assert.assertTrue("Invalid exception thrown",
(e.getCause() instanceof CustomException));
throw (CustomException) e.getCause();
}
Assert.fail("Invalid response");
我想知道是否有其他/优雅的方式可以实现这一点
P.S.:
1。非常有用的帖子,但没有提到我的场景
2。executePrivateMethod
使用反射来调用私有方法
当抛出异常时需要进行额外验证时,您的设计是典型的。我唯一想说的是,你不需要fail
,exception.expect
会帮你解决这个问题。
此外,您不需要也不应该强制转换为CustomException
。这可能导致ClassCastException
,而不是声明expected CustomException, received SomeOtherException
的漂亮错误消息。