Possiedo una suite di test JUnit 4 con i metodi BeforeClass e AfterClass che eseguono un'installazione/rimozione per le seguenti classi di test. Quello di cui ho bisogno è di eseguire le classi di test anche da loro stessi, ma per quello ho bisogno di uno scenario di setup/teardown (BeforeClass e AfterClass o qualcosa del genere) per ogni classe di test. Il fatto è che quando eseguo la suite non voglio eseguire il setup/teardown prima e dopo ogni classe di test, voglio solo eseguire il setup/teardown dalla suite di test (una volta). È possibile? Grazie in anticipo.Suite di prove Junit 4 e classi di test individuali
risposta
Non conosco alcun modo standard per farlo con JUnit. Il motivo, come probabilmente già sai, è che i tuoi casi di test dovrebbero funzionare indipendentemente l'uno dall'altro. Ciò riguarda i metodi "normali" di setup/teardown eseguiti prima e dopo ciascun metodo di test. L'impostazione della classe e il teardown sono un po 'diversi, anche se preferirei comunque eseguire i miei test in modo indipendente e stare fuori dalla zona problematica.
Tuttavia, se si è veramente convinti di ciò che si sta facendo, è possibile utilizzare un flag globale per segnalare se l'installazione di classe/di teardown deve essere eseguita e per verificarne lo stato nei metodi di installazione di classe/smontaggio . Nella tua suite di test, potresti includere una classe speciale come la prima, che non fa altro che eseguire la configurazione e impostare il flag globale per indicare ai veri casi di test che i loro metodi di setup/teardown della classe non devono essere eseguiti. Allo stesso modo, un'ultima classe speciale nella suite può eseguire il codice di rimozione. L'avvertenza è che temo che JUnit non garantisca l'ordine di esecuzione delle classi di test all'interno di una suite, sebbene molto probabilmente le esegua nell'ordine specificato - ma questo è solo un dettaglio di implementazione. Provalo, potrebbe funzionare per te, ma non c'è alcuna garanzia che farà sempre quello che ti aspetti.
Se si dispone di jUnit 4.7+, si consiglia di esaminare la nuova funzione denominata Regole (che viene spiegata in this blog post). Potrebbero non essere esattamente ciò che vuoi, ma probabilmente sono i migliori che ottieni con jUnit.
Presumibilmente TestNG offre migliori possibilità di raggruppamento dei test, ma non l'ho ancora esaminato personalmente.
No, non esiste un modo standard per farlo in JUnit, anche se potresti suggerire qualcosa come suggerito da Péter Török.
Si noti comunque che JUnit è più o meno abusante nel fare ciò. L'intero punto dell'unità verifica che siano indipendenti l'uno dall'altra. Questo perché le dipendenze tra i test creano un incubo di manutenzione totale (i test falliscono perché l'esecuzione è nell'ordine sbagliato).
Quindi vi consiglio di prendere in considerazione con forza se non è meglio solo sempre eseguire l'installazione ...
Grazie, id lo ha preso in considerazione, ma l'installazione ha una durata molto più lunga rispetto al test del buco con tutte le classi di test :) – Hypnus
Sento il tuo dolore :-(. Se dovessi fare anche questo, per i test con setup complicato (anche se era solo per classe). Una sorta di bandiera "Sono già inizializzato" è probabilmente la soluzione migliore. – sleske
Grazie per la risposta, in realtà ho pensato di questo, ma ho pensato che forse ci fosse una soluzione migliore. La ragione di ciò che voglio fare è che la configurazione pulisce l'ambiente e reimposta il database in modo che richieda del tempo e questo è il motivo per cui non voglio eseguire l'installazione per ogni classe di test, ma devo farlo quando eseguo un test individuale. – Hypnus