2012-10-18 10 views
14

org.junit.rules.MethodRule i org.junit.rules.TestWatchman zostały uznane za przestarzałe.dlaczego JUnit MethodRule i TestWatchman są przestarzałe?

jedna ciekawa uwaga była na: https://github.com/junit-team/junit/pull/519, w części: „Wielu deweloperów są uzasadnione powody, aby trzymać z MethodRule i zespół JUnit nie ma zamiaru usunąć wsparcie dla MethodRule ...”

http://junit-team.github.io/junit/javadoc/4.10/org/junit/rules/TestWatchman.html dokumenty: "Przestarzałe .Rozmiar metod jest przestarzały. Zamiast tego użyj TestWatchera zamiast używać TestRule." i podaje przykładowy kod.

Jaki jest powód oznaczenia tych przestarzałych? Co to jest kompromis między TestWatcher a przestarzałym TestWachman? Czy masz dobry link do streszczenia lub przeglądu tego konkretnego tematu?

+1

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

Odpowiedz

19

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

+1

, dlaczego więc MethodRule nie jest już przestarzałe w JUnit 4.11? – BrunoJCM

+1

Został wycofany z użycia, ponieważ nadal ma kilka przypadków użycia: zobacz https://github.com/junit-team/junit/pull/519 –

Powiązane problemy