2013-05-13 19 views
30

Ho un test di JUnit @Parameterized che genera 50 test:Test parametrici JUnit: come posso eseguire solo 1 test specifico da IntelliJ/Eclipse?

@RunWith(Parameterized.class) 
public class NurseRosteringSolveAllTurtleTest ... { 

    @Parameterized.Parameters(name = "{index}: {0}") 
    public static Collection<Object[]> getSolutionFilesAsParameters() { 
     return ... // returns 50 Files. 
    } 

    public NurseRosteringSolveAllTurtleTest(File unsolvedDataFile) { 
     ... 
    } 

    ... 

    @Test 
    public void solveDataFile() { 
     ... 
    } 

} 

esecuzione ci vuole un'ora (ed è impossibile per accorciare quel tempo, sono test di integrazione). Il test 28 fallisce.

Come si esegue il test 28 da solo, senza eseguire gli altri 49 test? Senza modificare il codice reale, semplicemente configurando un -D o qualcosa di simile nella configurazione di esecuzione di IntelliJ (o di Eclipse).

+0

Ho archiviato [un problema con il tracker dell'emissione di junit] (https://github.com/junit-team/junit/issues/677) –

+2

Vedo che il problema ha avuto una risposta: "* Non è stato eseguito il rodaggio modo per fare ciò, prendendolo come richiesta di una funzione. * ":-( –

risposta

5

Eclipse è ora (al momento del rilascio Mars M4) in grado di eseguire non solo un singolo test dalla classe di test con parametri ma qualsiasi tipo di sottostruttura.

Questo può essere:

  • tutti i metodi per un singolo set di dati come restituito dal parametrizzato metodo @
  • tutti i set di dati per un singolo @ Test-metodo

E come già menzionato, il test può anche essere specificato inserendo il nome del test nel testo "metodo" archiviato nella configurazione di avvio. Ci sarà un indicatore che indica che il metodo non esiste, ma il test verrà eseguito comunque.

Vedere this blog post per dettagli.

22

Ho appena testato questo in Eclipse con un semplice test parametrizzato che non riesce sempre al test # 4. È possibile fare clic con il pulsante destro del mouse sul test non riuscito e selezionare Eseguire. Solo quel test poi viene eseguito.

test output

Risultato:

just test 4

Frustrante, non riesco a vedere ciò che Eclipse ha fatto per risolvere il problema. Nulla è apparentemente alterato nella configurazione della corsa. In particolare, se si sceglie di eseguire la configurazione una seconda volta, esegue tutti i test.

Alcuni ulteriori test mostrano che Eclipse rigenera tutti i 10 valori di parametro, ma utilizza solo il 4 ° valore. (Ciò è stato determinato inserendo una dichiarazione di stampa nel metodo @Parameters).

+2

Non ho idea del motivo per cui qualcuno risparmierà questa risposta, perché questo è un vantaggio molto interessante. La domanda è se Eclipse lo ha hackerato o se sta usando un ambiente sconosciuto variabile di JUnit 4. In quest'ultimo caso, dovremmo essere in grado di simularlo manualmente nella configurazione di esecuzione di IntelliJ/Eclipse –

+0

@GeoffreyDeSmet Penso che questa potrebbe essere una buona domanda per le mailing list di Eclipse. –

+0

[Ecco come Eclipse lo implementa ] (http://blog.moritz.eysholdt.de/2014/11/new-eclipse-junit-feature-run-subtrees.html) –

3

Non so se sarà d'aiuto, ma puoi provare un trucco che ho usato con i test parametrizzati Eclipse e JUnit.

Nella configurazione di avvio di JUnit nel campo "Metodo di prova" è possibile scrivere il nome completo del test parametrizzato, nel proprio esempio dovrebbe essere qualcosa come "solveDataFile [28:/percorso/su/il/file]". Eclipse lamenterà che il metodo non esiste ma lo pranzerà comunque con successo.

+0

Grazie per la precisa sintassi. – rolve

2

Per un sottoinsieme di test ex (27 & 28) Basta aggiungere:

`.subList(startInclusive, stopExclusive);` 

prima di tornare la vostra collezione di parametri.

sottoinsiemi consecutivi non:

Collection<Object[]> c = Arrays.asList(data).subList(startInclusive, stopExclusive); 
c.add(another subset); 
return c; 
1

Analogamente alla risposta di Miguel, se si utilizza il JUnit 5 del

@ParameterizedTest 
@CsvFileSource(resources = arrayOf("/sender.csv")) 

si può andare al tuo file CSV e "commentate" alcune linee anteponendo il carattere # a loro.

Problemi correlati