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

Java JUnit中检查异常的短路传播方法,java,exception,junit,Java,Exception,Junit,我只是想到了一些我想做的小事,我很好奇是否有能力去做。这纯粹是一种方便的东西,几乎不是强制性的,但我认为在某种程度上可能已经实现了一点小小的方便 我在Junit测试用例的助手方法中有一个2-3层嵌套的方法,它抛出一个已检查的异常。我知道如果抛出这个异常,我希望失败。但是,如果我只调用Fail(),我将丢失异常的堆栈跟踪以及允许异常传播带来的其他便利 我知道“标准”方法是让方法抛出异常。然而,正如我所说,我已经深埋了一些方法,我怀疑这个方法将被许多未来的助手方法调用。如果我在这个方法中抛出一个异常

我只是想到了一些我想做的小事,我很好奇是否有能力去做。这纯粹是一种方便的东西,几乎不是强制性的,但我认为在某种程度上可能已经实现了一点小小的方便

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

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

有没有一种方法可以让JUnit像异常已传播到顶层并失败一样运行,而不必让我所有的方法都抛出它?所以JUnit会立即报告由于异常导致的失败,包括堆栈跟踪和全部。本质上,我想要一个接受异常的fail方法

像这样的东西存在吗,还是我必须扔掉它


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

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

因此,我的测试线束中有一个标准实用方法,它可以:

static public void fail(String message, Throwable t) {
    if (message == null) {
        throw new AssertionError(t);
    }
    throw new AssertionError(message, t);
}
然后,fail方法上的实际异常可用

从你的低级测试中,你只需要

MyTestUtilClass.fail("This exception was thrown", e);
这个过程非常有效。您可以得到一个标准的失败退出,但也可以得到导致异常的详细信息(在命令行上可见,并且像EclipseJUnit接口一样思考)

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