Powód jest prosty, miało zastąpić MethodRule
. MethodRule
wprowadzono realizowane w punkcie 4.7, a interfejs z jednym ze sposobów:
Statement apply(Statement base, FrameworkMethod method, Object target)
FrameworkMethod
jest (prawie) wewnętrznego klasy JUnit, które nie powinny być wystawione na pierwszym miejscu. object
to obiekt, na którym zostanie uruchomiona metoda, więc na przykład można zmodyfikować stan testu za pomocą odbicia.
TestRule
wprowadzono 4,9, jednakże, jest
Statement apply(Statement base, Description description)
Description
jest niezmienna POJO zawierający opis testu. Sposób modyfikacji stanu w teście polega na prawidłowym enkapsulacji w teście przy użyciu TestRule
. To całkowicie czystszy projekt.
Specyficzna różnica między TestWatchman(MethodRule)
a TestWatcher(TestRule)
jest minimalna, poza tym, że TestWatcher lepiej radzi sobie z błędami, więc powinno to być używane w preferencji. Oba mają możliwe do zastąpienia metody, takie jak succeeded()
, failed()
, starting()
, .
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)
obsługuje wyjątków w metodach overidden. Jeśli są zgłaszane wyjątki, metoda testowa kończy się niepowodzeniem po wykonaniu testu, a nie podczas.
Aby uzyskać więcej informacji, zobacz TestWatcher i TestWatchman
Według informacje o wydaniu wersji 4.11 JUnit „MethodRule nie jest już przestarzała” Zobacz https://github.com/KentBeck/junit/blob/master/doc/ReleaseNotes4.11.md – sversch