2014-07-01 14 views
12

forniti classi di test JUnit e sono entrambi sul percorso di classe, si può eseguire test JUnit dalla riga di comando come segue:È possibile eseguire tutti i test JUnit in un pacchetto dalla riga di comando senza elencarli esplicitamente?

java org.junit.runner.JUnitCore TestClass1 TestClass2 

Ora, c'è un modo per eseguire tutti i test in un pacchetto (e sotto- pacchetti) pure?

Sto cercando qualcosa di simile

java org.junit.runner.JUnitCore com.example.tests.testsIWantToRun.* 

C'è un modo semplice di fare questo (che non coinvolge Maven o formica)?

+0

Voglio eseguire tutti i test in un pacchetto e il relativo sottoprogetto sui server di Continuous Integration e non so quali pacchetti e test che gli adottanti sceglieranno di configurare. Ma non posso eseguirli tutti, perché i test in un certo pacchetto non dovrebbero essere avviati su quella scatola. Tutto ciò che richiede a qualcuno la creazione manuale di un elenco di test non è quindi ideale (a meno che un elenco di questo tipo non consista esclusivamente di esclusioni). – Christian

+0

possibile duplicato di [Come creare dinamicamente una suite di test in JUnit 4?] (Http://stackoverflow.com/questions/3257080/how-do-i-dynamically-create-a-test-suite-in-junit -4) – Christian

+0

Ho trovato le risposte per la mia domanda dopo aver ricevuto la risposta iniziale; sono collegati dalla mia risposta qui sotto. Ho anche appena iniziato un voto per chiuderlo come duplicato. – Christian

risposta

9

Junit consente di definire suites di test. Ogni suite definisce una raccolta di test e l'esecuzione della suite consente di eseguire tutti i test. Quello che faccio è quello di definire una suite per ogni pacchetto, che elenca le classi di test per quel pacchetto insieme alle suite per ogni sotto-pacchetti:

package com.foo.bar; 

import org.junit.runner.RunWith; 
import org.junit.runners.Suite; 

import com.foo.bar.baz.Suite_baz; 

@RunWith(Suite.class) 
@Suite.SuiteClasses({ 
    ThisTest.class, 
    ThatTest.class, 
    TheOtherTest.class, 
    Suite_baz.class, 
}) 
public class Suite_bar { 
} 

Questo non è del tutto senza sforzo. Devi costruire le suite e aggiornarle manualmente con nuove classi di test. Suppongo che non sarebbe difficile scrivere un piccolo programma java per generarli automaticamente, se qualcuno lo volesse.

2

Ho chiesto a questa domanda di essere in grado di rilasciare set di test Cucumber di un progetto su Jenkins in modo selettivo, senza sapere veramente quale sarebbe stata chiamata la loro classe RunTests, cosa avrebbero dovuto contenere le loro CucumberOptions o dove sarebbero state collocate. Ho trovato un paio di discussioni utili su StackOverflow nel frattempo, che rispondere alla mia domanda:

Utilizzando quelli, posso dare il mio test cetriolo off singolarmente come segue:

Innanzitutto, ho utilizzato il plug-in di assembly Maven per ottenere i test confezionati in un jar: https://stackoverflow.com/a/574650/2018047

Poi ho copiato le dipendenze delle prove per la cartella di destinazione sul Jenkins, come illustrato di seguito: https://stackoverflow.com/a/23986765/2018047

Abbiamo già un flag che salta l'esecuzione dei nostri test quando è impostato, così ho il mio pacchetto di test senza di loro in esecuzione : mvn clean install -DskipMyTestModule=true

e utilizzando il codice dall'alto e l'invocazione di quaggiù, io sarò in grado di far funzionare il tutto ...

java -Dcucumber.options="src/test/resources/features --tags @b --format pretty:STDOUT --format html:target/cucumber-b --format json:target/cucumber-b.json" -Dname=value -cp target/artifact-1.2.8-SNAPSHOT-tests.jar;target/test-classes/libs/junit-4.11.jar;target/test-classes/libs/* org.junit.runner.JUnitCore com.example.foo.bar.test.cucumber.RunTest 

Spero che questo aiuti qualcuno in futuro. :)

1

Con JUnit 4 questo è supportato utilizzando un'estensione chiamata cpsuite.Tutto quello che dovete fare è aggiungere al vostro classpath prova (Maven io.takari.junit:takari-cpsuite), creare una dinamica di classe suite di test:

package com.mycompany; 
import org.junit.extensions.cpsuite.ClasspathSuite; 
import org.junit.runner.RunWith; 

@RunWith(ClasspathSuite.class) 
@ClasspathSuite.IncludeJars(true) 
public class RunAllTests {} 

ed eseguirlo:

java -cp ${CP} org.junit.runner.JUnitCore com.mycompany.RunAllTests 

classpath ${CP} dovrebbe includere il vostro vaso di prova , junit, hamcrest e cpsuite.

Problemi correlati