0

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

我有一个方法位于 Junit 测试用例的辅助方法中的 2-3 层,该方法会引发检查异常。我知道如果这个异常被抛出,我想失败。但是,如果我只是调用 Fail() 我会丢失异常的堆栈跟踪以及允许异常传播所带来的其他便利

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

有没有一种方法可以告诉 JUnit 就像异常已经传播到顶层并失败一样,而不必让我的所有方法都抛出它?因此,JUnit 立即报告由于异常而导致的失败,以及堆栈跟踪和所有内容。本质上,我想要一个失败的方法来处理异常。

这样的东西是否存在,还是我必须简单地扔掉它?

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

4

1 回答 1

0

我在一个测试实用程序类中创建了一个标准函数,该函数创建并抛出一个 AssertionError(这是jUnit 的 Fail 方法所做的:)

// 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);
}

然后在fail方法上可以使用实际的异常......

从你刚刚做的低级测试

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

这个过程真的很好。你会得到一个标准的失败退出,还有原因异常的详细信息(在命令行上可见并且像 eclipse JUnit 界面一样思考)

于 2013-09-18T23:16:55.553 回答