在java中断言从私有方法引发的异常的另一种方法
我需要断言在java中断言从私有方法引发的异常的另一种方法,java,exception,reflection,junit,Java,Exception,Reflection,Junit,我需要断言CustomException是从一个私有实用工具方法doSomething 这是我迄今为止实施的,并且正在发挥作用 在测试类级别定义规则 @规则 public ExpectedException exception=ExpectedException.none() 试验方法的相关部分 exception.expect(CustomException.class); // prepare call to executePrivateMethod try { execut
CustomException
是从一个私有实用工具方法doSomething
这是我迄今为止实施的,并且正在发挥作用 在测试类级别定义规则
@规则
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");
我想知道是否有其他/优雅的方法可以实现这一点
附言:
1。非常有帮助,但没有提到我的场景
2executePrivateMethod
使用反射来调用私有方法当抛出异常时,您的设计通常需要进行额外的验证。我唯一要说的是,您不需要失败
,异常。expect
会为您解决这个问题
此外,您不需要也不应该强制转换为CustomException
。这可能会导致出现一个ClassCastException
,而不是一条漂亮的错误消息,说明expected CustomException,received SomeOtherException
我倾向于将方法包设为私有,可能是包私有助手类的一部分。顺便提一下,为什么您需要知道自定义异常是从私有方法抛出的?通常,您应该尝试测试被测试单元的公开接口,否则,如果更改实现,您的测试将毫无理由地开始失败。@Assylas同意,但只有在您有权访问源代码时才有可能;我没有:(@DaveHowes公开的接口有多个步骤。每个步骤都是作为私有助手方法实现的。为了确保各个步骤的完整性得到维护,并完成了正确的错误处理,我需要对它们进行测试。