Junit's @BeforeClass
i @AfterClass
muszą być zadeklarowane jako statyczne. Istnieje ładne obejście here dla @BeforeClass
. Mam wiele testów jednostkowych w mojej klasie i chcę tylko raz zainicjować i wyczyścić. Każda pomoc, jak uzyskać obejście dla @AfterClass
? Chciałbym używać Junit bez wprowadzania dodatkowych zależności. Dzięki!Junit @AfterClass (nie statyczny)
Odpowiedz
Jeśli chcesz czegoś podobnego do obejścia opisanego dla @BeforeClass
, możesz śledzić, ile testów zostało przeprowadzonych, a następnie, po wykonaniu wszystkich testów, w końcu wykonaj końcowy kod oczyszczania.
public class MyTestClass {
// ...
private static int totalTests;
private int testsRan;
// ...
@BeforeClass
public static void beforeClass() {
totalTests = 0;
Method[] methods = MyTestClass.class.getMethods();
for (Method method : methods) {
if (method.getAnnotation(Test.class) != null) {
totalTests++;
}
}
}
// test cases...
@After
public void after() {
testsRan++;
if (testsRan == totalTests) {
// One time clean up code here...
}
}
}
Zakłada używasz JUnit 4. Jeśli trzeba uwzględnić metod odziedziczonych z nadklasy, zobacz this jak to rozwiązanie nie zostanie odziedziczone metody.
to może działać w prostych przypadkach, ale nie zadziała, jeśli testy zostaną zignorowane, lub w testach dziedziczonych – dkatzel
@dkatzel Dobra uwaga. Można również iterować poprzez odziedziczone metody, wykonując coś w stylu [to] (https://stackoverflow.com/questions/28400408/what-is-the-new-way-of-getting-all-metods-of-a- class-included-inherited-defau). Najlepiej jest zachować zasoby, które powinny być czyszczone tylko raz jako statyczne i dbać o to podczas '@ AfterClass'. – kingkupps
Co powstrzymuje Cię od używania metod statycznych do skonfigurowania i zerwania? To prawda, że ustawiony stan musiał zostać przeniesiony do pól statycznych, ale brzmi to tak, jakby chciał on mieć zasięg statyczny. –
Zapisz instancję testową w polu "static". Wejdź do niego w swojej metodzie '@ AfterClass' i poproś o wywołanie dowolnej metody czyszczenia. –
Istnieją inne klasy, które uzyskują dostęp do tej samej metody czyszczenia, która wymaga różnych zakresów. – jamesw1234