理由は単純で、TestRule交換する予定だったからMethodRuleです。MethodRule4.7 で導入され、1 つのメソッドを持つインターフェイスです。
Statement apply(Statement base, FrameworkMethod method, Object target)
FrameworkMethod(ほぼ) 内部 JUnit クラスであり、そもそも公開されるべきではありませんでした。objectメソッドが実行されるオブジェクトです。たとえば、リフレクションを使用してテストの状態を変更できます。
TestRuleただし、4.9 で導入されました。
Statement apply(Statement base, Description description)
Descriptionテストの説明を含む不変の POJO です。テスト内で状態を変更する方法は、 を使用してテスト内で正しくカプセル化することTestRuleです。全体的にすっきりとしたデザインです。
TestWatchman(MethodRule)との具体的な違いTestWatcher(TestRule)はごくわずかですが、TestWatcher の方がエラー処理が優れているため、優先的に使用する必要があります。どちらにも、、、、などのオーバーライド可能なメソッドが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を参照してください。