在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。非常有帮助,但没有提到我的场景
2
executePrivateMethod
使用反射来调用私有方法

当抛出异常时,您的设计通常需要进行额外的验证。我唯一要说的是,您不需要
失败
异常。expect
会为您解决这个问题


此外,您不需要也不应该强制转换为
CustomException
。这可能会导致出现一个
ClassCastException
,而不是一条漂亮的错误消息,说明
expected CustomException,received SomeOtherException

我倾向于将方法包设为私有,可能是包私有助手类的一部分。顺便提一下,为什么您需要知道自定义异常是从私有方法抛出的?通常,您应该尝试测试被测试单元的公开接口,否则,如果更改实现,您的测试将毫无理由地开始失败。@Assylas同意,但只有在您有权访问源代码时才有可能;我没有:(@DaveHowes公开的接口有多个步骤。每个步骤都是作为私有助手方法实现的。为了确保各个步骤的完整性得到维护,并完成了正确的错误处理,我需要对它们进行测试。