从JUnit测试中抛出异常

我正在寻找一种方法来捕获由JUnit测试引发的所有异常,然后重新抛出它们; 在发生异常时向测试状态的错误消息添加更多详细信息。

JUnit捕获org.junit.runners.ParentRunner中引发的错误

protected final void runLeaf(Statement statement, Description description,
        RunNotifier notifier) {
    EachTestNotifier eachNotifier = new EachTestNotifier(notifier, description);
    eachNotifier.fireTestStarted();
    try {
        statement.evaluate();
    } catch (AssumptionViolatedException e) {
        eachNotifier.addFailedAssumption(e);
    } catch (Throwable e) {
        eachNotifier.addFailure(e);
    } finally {
        eachNotifier.fireTestFinished();
    }
}

这种方法很不幸是最后的,所以不能被覆盖。 另外,因为异常正在被捕获,像Thread.UncaughtExceptionHandler不会有帮助。 我能想到的唯一的其他解决方案是围绕每个测试的try / catch块,但该解决方案不太可维护。 任何人都可以指出我更好的解决方案吗?


你可以为此创建一个TestRule。

public class BetterException implements TestRule {
  public Statement apply(final Statement base, Description description) {
    return new Statement() {
      public void evaluate() {
        try {
          base.evaluate();
        } catch(Throwable t) {
          throw new YourException("more info", t);
        }
      }
    };
  }
}

public class YourTest {
  @Rule
  public final TestRule betterException = new BetterException();

  @Test
  public void test() {
    throw new RuntimeException();
  }
}
链接地址: http://www.djcxy.com/p/81715.html

上一篇: throw Exceptions from JUnit Tests

下一篇: error compiling junit test with expect exception