在JUnit中短路传播已检查异常的方法

时间:2013-09-18 22:58:56

标签: java exception junit

我只是想到了一些我想做的小事,并且好奇它是否有能力做到这一点。这纯粹是一种方便的句法 - 糖类的东西,几乎没有强制要求,但我认为可能在某些时候实现了一些方便。

我有一个方法在Junit测试用例的辅助方法中嵌套了2-3层,抛出了一个已检查的异常。我知道如果抛出这个异常我想失败的事实。但是,如果我只调用Fail(),我会丢失异常的堆栈跟踪以及允许异常传播的其他便利

我知道'标准'方法是让方法抛出异常。但是,正如我所说,我已经深入埋藏了一些方法,我怀疑这种方法将被许多未来的辅助方法调用。如果我在这个方法中抛出异常,我将不得不经常向所有直接或间接使用这一方法的方法添加一个throw子句,这可能是一些方法。这显然是可行的,只是有点烦人;并且,至少在理论上,我可以掩盖抛出异常的情况,如果我的所有方法都已抛出它,我实际上想抓住它。

有没有一种方法可以告诉JUnit,就好像 传播到顶级并且失败,而不必让我的所有方法抛出它?因此,JUnit会立即报告由于异常导致的故障,堆栈跟踪和所有异常。基本上我想要一个异常的失败方法。

这样的事情是否存在,或者我必须简单地扔掉它?

PS。我知道我可以将它包装在RuntimeException中并重新抛出它,但我也不喜欢这个选项。

1 个答案:

答案 0 :(得分:0)

我在测试实用程序类中创建了一个标准函数,它创建并抛出一个AssertionError(这就是Fail method of jUnit does:)

// this is from the JUnit source code 
static public void fail(String message) {
    if (message == null) {
        throw new AssertionError();
    }
    throw new AssertionError(message);
}

所以,我的测试工具中有一个标准的实用工具方法:

static public void fail(String message, Throwable t) {
    if (message == null) {
        throw new AssertionError(t);
    }
    throw new AssertionError(message, t);
}

然后在失败方法上可以获得实际的异常......

来自您的低级别测试

MyTestUtilClass.fail("This exception was thrown", e);

这个过程非常有效。并且你得到一个标准的失败退出,还有原因异常的细节(在命令行上可见,并且像eclipse JUnit接口一样)