2011-01-10 11 views
5

Sono abbastanza nuovo in Java. Ho costruito una singola classe di test JUnit e all'interno di questo file ci sono un certo numero di metodi di test. Quando eseguo questa classe (in NetBeans) esegue ogni metodo di test nella classe in ordine.Come posso eseguire (o modificare l'ordine di) metodi di test specifici in una classe di test JUnit?

Domanda 1: Come posso eseguire solo un sottoinsieme specifico dei metodi di test in questa classe? (Risposta potenziale: Scrivi @Ignore sopra @Test per i test che desidero ignorare.Tuttavia, se voglio indicare quali metodi di test voglio eseguire piuttosto che quelli che voglio ignorare, c'è un modo più conveniente per farlo ?)

Domanda 2: Esiste un modo semplice per modificare l'ordine in cui vengono eseguiti i vari metodi di prova?

Grazie.

+0

Quando dici metodi, stai parlando dei metodi di prova? –

+3

Perché l'ordine è importante? Ogni test unitario dovrebbe essere in grado di funzionare separatamente. –

+2

Generalmente un odore di prova dipende dall'ordine di esecuzione, i test devono essere apolidi. –

risposta

6

Si consiglia di leggere su TestSuite s. Consentono di raggruppare & ordinare i metodi di test dell'unità. Ecco un forma di estratto this article

classi di test JUnit" possono essere arrotolati per l'esecuzione in un ordine specifico con la creazione di un Test Suite

EDIT:. Ecco un esempio che mostra come è semplice:

public static Test suite() { 
     TestSuite suite = new TestSuite("Sample Tests"); 

     suite.addTest(new SampleTest("testmethod3")); 
     suite.addTest(new SampleTest("testmethod5")); 

     return suite; 
} 
+0

L'esempio esegue tutti i metodi di prova in SampleTest.class. Tuttavia, cosa succede se in SampleTest.class ho vari metodi di test [testmethod1(), testmethod2(), ...] e ho solo per eseguire testmethod3() e testmethod5(); sarebbe possibile? – kmccoy

+1

@K McCoy: ho modificato il mio esempio per soddisfare i tuoi requisiti :) – Lukasz

+1

Ho testato il codice precedente e ho notato due cose: (1) La prima riga dovrebbe essere la seguente: public statica TestSuite suite() { (2) All'interno della classe SampleTest è necessario definire il costruttore public SampleTest (String name) { super(name); } Altrimenti, questo ha fatto il trucco per me. Grazie! – kmccoy

0

ci sono una serie di approcci a questo, ma dipende dalle vostre esigenze specifiche. Per esempio, si potrebbe dividere ciascuno dei tuoi metodi di test nelle classi di test separati, un d poi sistemarli in diverse suite di test (che consentirebbero la sovrapposizione dei metodi nelle suite se lo si desidera). Oppure, una soluzione più semplice sarebbe quella di rendere i metodi di prova normali metodi di classe con un metodo di test nella classe che li chiama nell'ordine specifico. Vuoi che vengano chiamati dinamicamente?

2

This answer ti dice come farlo. Randomizzare l'ordine di esecuzione dei test è una buona idea!

Come il commento di dom farr, ogni unità di test dovrebbe essere in grado di funzionare separatamente. Non ci dovrebbero essere residui e nessun dato requisito dopo o prima di una corsa di prova. Tutti i test unitari devono essere eseguiti in qualsiasi ordine o sottoinsieme.

Non è una pessima idea avere o generare una mappa di Test Case -> List of Test e quindi eseguire in modo casuale tutti i test.

0

Non ho usato Java da tanto tempo, ma per quanto ho visto non c'è un metodo conveniente per marcare metodi da eseguire piuttosto che ignorare. Invece penso che questo potrebbe essere ottenuto usando l'IDE. Quando voglio farlo in Eclipse, posso usare la vista junit per eseguire i singoli test facendo clic su di essi. Immagino ci sia qualcosa di simile in Netbeans.

Non conosco un modo semplice per riordinare l'esecuzione del test. Eclipse ha un pulsante per eseguire di nuovo i test con i test non riusciti, ma sembra che tu voglia qualcosa di più versatile.

Problemi correlati