原因很简单,本来打算更换的。 在4.7中引入,它是一个具有一种方法的接口:TestRule
MethodRule
MethodRule
Statement apply(Statement base, FrameworkMethod method, Object target)
FrameworkMethod
(几乎)是一个内部 JUnit 类,它本来就不应该公开。 是将在其上运行方法的对象,因此,例如,您可以使用反射修改测试的状态。object
TestRule
然而,在4.9中引入的是:
Statement apply(Statement base, Description description)
Description
是包含测试描述的不可变 POJO。在测试中修改状态的方法是使用 在测试中正确封装。这是一个完全干净的设计。TestRule
和 之间的具体差异很小,除了 TestWatcher 具有更好的错误处理,因此应优先使用。两者都有可重写的方法,如 、 、 、 。TestWatchman(MethodRule)
TestWatcher(TestRule)
succeeded()
failed()
starting()
finished()
public static class WatchmanTest {
private static String watchedLog;
@Rule
public TestWatcher watchman= new TestWatcher() {
@Override
protected void failed(Throwable e, Description description) {
watchedLog+= description + "\n";
}
@Override
protected void succeeded(Description description) {
watchedLog+= description + " " + "success!\n";
}
};
@Test
public void fails() {
fail();
}
@Test
public void succeeds() {
}
}
TestWatcher(TestRule)
处理重写方法中的异常。如果引发异常,则测试方法在执行测试后(而不是在测试期间)失败。
有关更多信息,请参见 TestWatcher 和 TestWatchman。