java – JUnit TestWatcher:失败了,是否可以删除抛出的异常(操纵Throwable / stacktrace)?

在JUnit中,使用TestWatcher并覆盖failed()函数,是否可以删除抛出的异常,而是自己进行断言?

用例是:在Android上进行功能测试,当测试使应用程序崩溃时,我想用AssertionError(“app crashed”)替换NoSuchElementException.

我没有问题来进行自定义断言(当我在finished()方法中检测到崩溃时),但是如何删除抛出的异常?

因为在我的报告中,它为一个测试创建了异常和断言,因此失败的次数多于失败时的测试,这是逻辑但很烦人.

我想知道是否有一种方法可以自定义Throwable对象以删除特定的NoSuchElementException,从而操纵堆栈跟踪.

我没办法做到这一点. (并且我不想在每次测试中使用try / catch执行它…).

解决方法:

您可以覆盖TestWatcher.apply并为NoSuchElementException添加一个特殊的catch:

public class MyTestWatcher extends TestWatcher {
    public Statement apply(final Statement base, final Description description) {
        return new Statement() {
            @Override
            public void evaluate() throws Throwable {
                List<Throwable> errors = new ArrayList<Throwable>();

                startingQuietly(description, errors);
                try {
                    base.evaluate();
                    succeededQuietly(description, errors);
                }
                catch (NoSuchElementException e) {
                    // ignore this
                }
                catch (AssumptionViolatedException  e) {
                    errors.add(e);
                    skippedQuietly(e, description, errors);
                }
                catch (Throwable e) {
                    errors.add(e);
                    failedQuietly(e, description, errors);
                }
                finally {
                    finishedQuietly(description, errors);
                }

                MultipleFailureException.assertEmpty(errors);
            }
        };
    }
上一篇:在Java中自定义异常中的字段序列化


下一篇:Java Debugger运行应用程序而不会中断