理由は単純で、TestRule
交換する予定だったからMethodRule
です。MethodRule
4.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を参照してください。