OK, więc @Ignore
adnotacja jest dobra do oznaczenia, że przypadek testowy nie powinien zostać uruchomiony.
Czasami jednak chcę zignorować test oparty na informacjach wykonawczych. Przykładem może być test współbieżności, który należy uruchomić na maszynie z określoną liczbą rdzeni. Jeśli ten test zostałby uruchomiony na maszynie jednoprocesorowej, nie sądzę, że poprawne byłoby po prostu zdanie testu (ponieważ nie został on uruchomiony), a na pewno nie byłoby poprawne zdanie testu i przerwanie kompilacji .
Chcę więc móc ignorować testy w czasie wykonywania, ponieważ wydaje się to właściwym wynikiem (ponieważ środowisko testowe pozwoli kompilacji przejść, ale zapisz, że testy nie zostały uruchomione). Jestem całkiem pewien, że adnotacja nie zapewni mi tej elastyczności i podejrzewam, że będę musiał ręcznie utworzyć pakiet testowy dla danej klasy. Jednak dokumentacja nie wspomina nic na ten temat, a przeglądając interfejs API, nie jest również jasne, w jaki sposób można to zrobić programowo (tj. Jak programowo utworzyć instancję Test
lub podobną, która jest równoważna z instancją utworzoną przez @Ignore
adnotację?).
Jeśli ktoś zrobił coś podobnego w przeszłości lub ma jasne pojęcie, jak inaczej mógłbym się tym zająć, chętnie o tym usłyszę.
źródło
@BeforeClass
adnotacja, w której może się nie powieść założenie, które pominie całą klasę. Innym jest@ClassRule
(dla drobnoziarnistej kontroli, ale jednorazowo dla całej klasy).Powinieneś sprawdzić
Junit-ext
projekt. MająRunIf
adnotację, która wykonuje testy warunkowe, takie jak:[Próbka kodu pobrana z samouczka]
źródło
Assume
bezpośrednio, aby nie wprowadzać innej zależności.@RunIf
oddziela warunek, w którym test powinien zostać uruchomiony od rzeczywistego kodu testu, co moim zdaniem jest dobre. Nie podoba mi się to, że wymaga konkretnego testera. Dlatego napisałem regułę JUnit, aby warunkowo ignorować testy.W JUnit 4 inną opcją może być utworzenie adnotacji oznaczającej, że test musi spełniać Twoje niestandardowe kryteria, a następnie rozszerzenie domyślnego elementu uruchamiającego o własne i użycie refleksji, opierając swoją decyzję na niestandardowych kryteriach. Może to wyglądać mniej więcej tak:
źródło
BlockJUnit4ClassRunner
nie oferujeisIgnored
już tej metody.Szybka uwaga:
Assume.assumeTrue(condition)
ignoruje pozostałe kroki, ale pozytywnie przechodzi test. Aby zakończyć test niepowodzeniem, użyjorg.junit.Assert.fail()
instrukcji warunkowej. Działa tak samo,Assume.assumeTrue()
ale nie przejdzie testu.źródło