Piszę test JUnit4, w którym używam reguły TemporaryFolder. Wygląda na to, że działa dobrze zarówno z @Rule, jak i @ClassRule. Jaka jest różnica między Junit @Rule i @ClassRule? Dlaczego powinienem używać jednego, a nie innego?Junit @Rule i @ClassRule
Odpowiedz
Rozróżnienie staje się jasne, gdy masz więcej niż jedną metodę testową w klasie.
Metoda @ClassRule
jest uruchamiana przed każdą z metod testowania. Następnie uruchamiane są wszystkie metody testowe, a na końcu metoda reguły: after()
. Jeśli więc masz pięć metod testowania w klasie, before()
i after()
nadal będą uruchamiane tylko raz.
@ClassRule
dotyczy metody statycznej, a wraz z nią wszystkie związane z nią ograniczenia.
A @Rule
powoduje, że testy są uruchamiane za pomocą metody reguły apply()
, która może wykonywać operacje przed i po uruchomieniu metody docelowej. Jeśli masz pięć metod testowania, reguła o nazwie apply()
jest wywoływana pięć razy, jako otoczka dla każdej metody.
Użyj @ClassRule
, aby skonfigurować coś, co może być ponownie użyte przez wszystkie metody testowania, jeśli możesz to osiągnąć w metodzie statycznej.
Użyj opcji @Rule
, aby skonfigurować coś, co należy utworzyć od nowa lub zresetować dla każdej metody testowania.
@Rule nie można ustawić przed uruchomieniem @BeforeClass.
Podczas gdy @ClassRule musi być w statycznej metodzie.