throw Exceptions from JUnit Tests

I am looking for a way to catch all exceptions thrown by JUnit tests then re-throw them; to add more detail to the error message about the test state when the exception occurred.

JUnit catches errors thrown in 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();
    }
}

This method is unfortunately is final so it cannot be overridden. Also as exceptions are being caught something like Thread.UncaughtExceptionHandler will not help. The only other solution I can think of is try/catch block around each test but that solution is not very maintainable. Could anyone point me to a better solution?


你可以为此创建一个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/81716.html

上一篇: ExpectedException.expectMessage((String)null)不起作用

下一篇: 从JUnit测试中抛出异常