Junit @BeforeClass
e @AfterClass
devono essere dichiarati statici. C'è una soluzione alternativa here per @BeforeClass
. Ho un numero di test unitari nella mia classe e desidero solo inizializzarlo e ripulirlo una volta. Qualsiasi aiuto su come ottenere una soluzione alternativa per @AfterClass
? Mi piacerebbe usare Junit senza introdurre ulteriori dipendenze. Grazie!Junit @AfterClass (non statico)
risposta
Se si desidera qualcosa di simile alla soluzione menzionata per @BeforeClass
, è possibile tenere traccia di quanti test sono stati eseguiti, quindi una volta eseguiti tutti i test, infine, eseguire il codice di pulizia finale.
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...
}
}
}
Questo presuppone che si sta utilizzando JUnit 4. Se è necessario tenere conto di metodi ereditati da una superclasse, vedi this come questa soluzione non venga metodi ereditati.
questo potrebbe funzionare in casi semplici ma non funzionerà se i test vengono ignorati, o in test ereditati – dkatzel
@dkatzel Buon punto. Puoi anche scorrere i metodi ereditati facendo qualcosa come [this] (https://stackoverflow.com/questions/28400408/what-is-the-new-way-of-getting-all-methods-of-a- class-compresi-ereditato-Sottotito). Probabilmente è meglio mantenere le risorse che dovrebbero essere ripulite solo una volta come statiche e occuparsene durante '@ AfterClass'. – kingkupps
Che cosa ti impedisce di utilizzare metodi statici per impostare e rimuovere? È vero, lo stato che hai impostato dovrebbe essere spostato su campi statici, ma sembra che tu voglia avere un ambito statico. –
Salva l'istanza di prova in un campo 'static'. Accedilo nel tuo metodo '@ AfterClass' e invoca qualsiasi metodo di pulizia che desideri. –
Ci sono altre classi che accedono allo stesso metodo di ripulitura che richiede ambiti diversi – jamesw1234