从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