Catch and Re-throw Exceptions from JUnit Tests
我正在寻找一种方法来捕获JUnit测试抛出的所有异常,然后重新抛出它们;以便在异常发生时向有关测试状态的错误消息中添加更多详细信息。
JUnit捕获在org.junit.runners.parentrunner中引发的错误
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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(); } } |
很遗憾,此方法是最终的,因此无法重写。另外,由于异常被捕获,例如线程。UncaughtExceptionHandler将不会起作用。我能想到的另一个解决方案是在每个测试周围使用try/catch块,但该解决方案的可维护性不是很强。有人能给我指出一个更好的解决方案吗?
您可以为此创建一个测试规则。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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(); } } |