2016-12-13 17 views
13

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

23

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.

1

@Rule nie można ustawić przed uruchomieniem @BeforeClass.

Podczas gdy @ClassRule musi być w statycznej metodzie.