2012-12-14 14 views
10

Czy jest możliwe uruchomienie metody JUnit @Test w klasie, która ma metodę opatrzoną komentarzem @Before, ale zignorowanie metody @Before tylko dla tego testu?Uruchom Junit @ Test ignoruje @ Przed/@ Po

Edytuj: Jestem zainteresowany, czy JUnit obsługuje tę funkcję, a nie obejścia. Jestem świadomy obejścia, jak przeniesienie testu (ów) w innej klasie lub usunięcie adnotacji i ręczne wywołanie setUp() w każdej metodzie testu.

Załóżmy, że w klasie jest 30 testów, a dla 29 z nich @Before naprawdę upraszcza inicjowanie testowania, ale dla jednego (lub więcej niż jednego) z nich jest bezużyteczny/to komplikuje rzeczy.

public class MyTestClass { 

    @Before 
    public void setUp() { 
     //setup logic 
    } 

    @Test 
    public void test1() { 
     //[...] 
    } 

    @Test 
    public void test2() { 
     //[...] 
    } 

    //more tests here 

    @Test(ignoreBefore = true, ignoreAfter = true //false by default) 
    //something equivalent to this 
    public void test20() { 
     //[...] 
    } 

} 
+0

Czy możesz przenieść 'test20' w oddzielnej klasie bez adnotacji' @ Before' i '@ After'? – user1516873

+0

@ user1516873 Technicznie tak, ale chciałbym zachować wszystkie testy dla klasy w jednej klasie testowej. Gdy klasa została zaprojektowana/rozwinięta, nie uznano testów i refaktoryzacja nie jest rozwiązaniem. Ponadto, definicja testów jednostkowych mówi, że są one niezależne i mogą być uruchamiane osobno. – m3th0dman

Odpowiedz

5

Możesz to zrobić za pomocą TestRule. Zobacz moją odpowiedź na Exclude individual test from 'before' method in JUnit. Zasadniczo zaimplementuj ExternalResource, aw metodzie zastosowania sprawdź, czy istnieje konkretna adnotacja w metodzie, a jeśli tak, nie uruchamiaj metody przed/po. Będziesz musiał jednak konkretnie zadzwonić do przed/po z reguły.

2

Jeśli jest bezużyteczny, nie powinien stanowić problemu - czy ponowne uruchomienie setUp jest szkodliwe?

Jednak nie sądzę, że to możliwe i wygląda na mnie jako cecha kaleki.

Inne podejście - przenieś ten test do oddzielnej klasy testowej.

+1

+1 Zdecydowanie błądziłbym po stronie osobnej klasy testowej. Oczywiście inne testy mają podobieństwa, które wymagają ich zgrupowania. Twój dziwny test nie działa. –

+0

Jestem naprawdę ciekawy, czy JUnit oferuje tę funkcjonalność, a nie obejścia. Dlaczego miałoby to wyglądać na kalekę? Czy w podstawowej definicji jednostki nie istnieje przekonanie, że testy jednostkowe powinny być całkowicie niezależne od siebie? Inne testy nie powinny przejmować się, czy niektóre z nich nazywają metody @Before, a inne nie. – m3th0dman

+0

@ m3th0dman to nie jest zależność między testami, ale zależność od kontekstu testu. Test jest umieszczany w klasie za pomocą metody setUp. Dlaczego nie jest wtedy wykonywane? Wygląda bardzo zaskakująco. Niespodzianki w tworzeniu oprogramowania są nieprzyjemne. – kan