Tworzę testy jednostkowe w Javie, i dla każdej metody tworzę te same listy, zmienne itp. Z drugiej strony, oczywiście, myślałem, że mogę stworzyć wszystkie te zmienne jako globalne i ustawić ich wartości w setup()
sposób (w @Before
), ale nie jestem pewien, że wartości mogą być zmieniane podczas wykonywania testów z wielowątkowości itp. Więc jaki jest najlepsze wyjście z tej sytuacji?
Nie ma się o co martwić. JUnit stworzy nowy egzemplarz swojego testowego klasy, a następnie uruchomi każdy @Before
metoda, i dopiero wtedy uruchom @Test
metoda i powtarza tę piosenkę i taniec w kółko dla każdego @Test
odnotowany metody w tej klasie. Używasz @Before
dokładnie tak, jak było zaplanowane: jest on przeznaczony do przechowywania kodu inicjalizacji, niezbędnego do wszystkich testów, w tym testowym klasie.
JUnit robi to w ten sposób, bo miło mieć "niezależność od testów": testy, najlepiej, oblewają lub odbywają się niezależnie od kolejności, w jakiej je wykonujesz.
Od czasu do czasu proces inicjalizacji tak drogie, że nie warto płacić za "cena" jego ponownego uruchomienia dla każdego testu. Streszczenie @BeforeClass
istnieje specjalnie do tego celu. Явадок z @BeforeClass
nawet stwierdza, że to stawia pod znakiem zapytania niezależność testowania i dlatego powinny być stosowane tylko wtedy, gdy praca konfiguracji, wykonywane w ramach tej metody, jest dość kosztowne (z punktu widzenia obliczeń lub w inny sposób) w celu osiągnięcia kompromisu.
Innymi słowy:
Twoje obawy co do niepodległości testów są prawdziwe, ale mają one zastosowanie do @BeforeClass
. @Before
nie cierpią z powodu tego problemu; ten kod ponownie uruchamiany dla każdego testu.
UWAGA: możesz wyrzucić wszystko przez okno, jeśli masz static
coś się dzieje. W testowanym kodzie nie ma statycznych elementów, jeśli naprawdę nie wiesz, co robisz. Zakładam, że u ciebie tego nie ma, i w tym przypadku - dalej, twoje testy są niezależne od siebie.
@BeforeClass
i @Before
. Jakieś wyjaśnienia, proszę? @Before
uruchamiane przed każdym testem. Wszystkie metody z @BeforeClass
działają tylko raz, przed każdym testem. Zwykle instalujesz static
rzeczy z @BeforeClass
który następnie jest ponownie wykorzystywane (w taki sposób, testy nie są niezależne). Instalujesz niestatyczne elementy rzeczy za pomocą @Before
i dlatego testy są niezależne od siebie. Wystarczy przeczytać dokumenty do tych notatek. @BeforeClass
(5 czerwca: @BeforeAll
) odbywa się jeden raz dla całego testu klasy, @Before
(5 czerwca: @BeforeEach
) jest wykonywana przed każdym poszczególnym metodą testowania. @BeforeEach
przeciwko @BeforeAll
no z twoich wyjaśnień. Jednak nie jestem pewien, czy należy czyścić listy, używane wieloma zadaniami, czy nie. Muszę je wyczyścić w @AfterEach
. Jakieś pomysły? @Before
i wydrukuj coś-nic nie usuwając. Następnie po prostu obserwuj, co się dzieje. @AfterEach
. Więc jaki jest właściwe podejście do tej sytuacji?. Jakieś pomysły? @Before
. Nie mam pojęcia, co jeszcze może cię strącić z tronu w tej chwili. W odpowiedzi wszystko jasne powiedziane!