我正在为自己的代码构建一个小的测试框架,并且我希望能够做到这一点:

test.callTo(() -> {/*...*/}).doesThrow(SomeException.class);


或类似的东西。

callTo方法将只构建一个包含java.lang.Runnable(或类似名称)的类的实例。该类将具有一个doesThrow方法,该方法采用一些参数来表示要捕获的异常的类型,并执行以下操作:

try {
    try {
        method.run();
    } catch(ThePassedInExceptionType e) {
        /* test passed */
        return;
    }
} catch (Throwable e) {}
/* test failed */


这种事情有可能吗?如果是这样,怎么办?如果没有,我还能做些什么来确保我的代码没有在测试代码中进行try / catch之外抛出正确的异常?

最佳答案

您可以做的是通过Class<? extends Exception>。将此参数称为clazz

那你可以做

catch (Exception e) {
    if (clazz.isInstance(e))
        // do something
}


我不确定这是否是个好习惯,但是应该可以。

关于java - 传递要捕获的异常类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36000690/

10-09 12:45