2010-11-13 4 views
14

Per quanto posso dire, la posizione dei file di test è corretta.Maven/Surefire non trova test da eseguire

Quando si esegue "mvn test", vengono individuate quattro classi denominate SomethingTest (si trovano nella cartella 'test').

Tuttavia, ignora qualsiasi dei test di jUnit (jUnit 4, annotato con @Test).

Come si esegue il debug di questo?

Modifica - questo è probabilmente correlato alla versione errata di jUnit incluso. Vedo questo durante l'esecuzione di "mvn -X"

[DEBUG] Retrieving parent-POM: org.codehaus.plexus:plexus:pom:1.0.4 for project: org.codehaus.plexus:plexus-containers:pom:1.0.3 from the repository. 
[DEBUG]  org.codehaus.plexus:plexus-container-default:jar:1.0-alpha-9-stable-1:runtime (selected for runtime) 
[DEBUG]   junit:junit:jar:3.8.1:runtime (selected for runtime) 
[DEBUG]   org.codehaus.plexus:plexus-utils:jar:1.0.4:runtime (removed - nearer found: 1.4.1) 
[DEBUG]   classworlds:classworlds:jar:1.1-alpha-2:runtime (selected for runtime) 

Anche se la mia prima dipendenza nel pom di root è su JUnit 4.8.1, per qualche motivo JUnit 3.8.1 viene incluso.

Modifica 2 - ok, questa non sembra essere la risposta. Il Classpath di test include il jUnit corretto (4) e le mie classi di test.

Modifica 3 - Ho avuto le classi di test denominate SomethingTester. Quando l'ho cambiato in SomethingTest, ha funzionato. Ho controllato i pattern di inclusione per Surefire, e in effetti non era configurato per catturare Something Tester. Doh.

+0

Questo sembra molto strano. Potresti pubblicare il tuo pom.xml? –

+0

@seanizer: hai visto Modifica 3? I miei schemi per il rilevamento dei test non erano semplicemente configurati correttamente. – ripper234

+0

oh capisco, allora dovresti aggiungerlo come risposta e accettarlo –

risposta

5

Forse questo è il problema:

mvn -X sarebbe stampare un gruppo di questi, in modo da poter cercare di capire se si tratta di qualcosa da quanto sopra - come non si usa la giusta versione di JUnit (ad es. quando si crea dall'artefatto quickstart, penso che il valore predefinito sia 3.8.1), avendo TestNG nel classpath prima di JUnit o giù di lì.

Edit: ho appena provato questo in un progetto semplice e la classe fornita nel link sopra e ha funzionato bene. Ho usato junit versione 4.8, che è l'unica dipendenza nel mio progetto. Giusto per confermare, stai annotando i metodi di test con @ org.junit.Test e ci sono alcune dichiarazioni org.junit.Assert.assertXXX in questi metodi, corretto?

Edit 2: Per cambiare JUnit a qualche altra versione, utilizzare questo:

<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>4.8</version> 
    <scope>test</scope> 
</dependency> 

Edit 3: Si dovrebbe avere qualcosa di simile nel classpath di prova:

[DEBUG] Test Classpath : 
[DEBUG] /home/icyrock/java/prb/target/test-classes 
[DEBUG] /home/icyrock/java/prb/target/classes 
[DEBUG] /home/icyrock/.m2/repository/junit/junit/4.8/junit-4.8.jar 
[DEBUG] /home/icyrock/.m2/repository/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1.jar 
[DEBUG] /home/icyrock/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar 
[DEBUG] /home/icyrock/.m2/repository/log4j/log4j/1.2.16/log4j-1.2.16.jar 

Edit 4: OK , Ho appena creato un progetto di test con artefatto quickstart di maven, aggiunto due moduli (anch'essi creati con artefatto quickstart) all'interno, aggiunto java source/target e junit: junit: 4.8 dipendenza solo dal genitore principale. Ho modificato solo uno dei test su JUnit4 (l'altro è di default su JUnit3, questo è quello che genera quickstart), mvn clean test dalla cartella padre funzionava bene.

Questo è molto probabilmente un problema di impostazione del progetto: puoi verificare che il tuo progetto sia cablato correttamente (cioè i moduli puntano al genitore, il gruppo/artefatto/versioni di progetti padre/figlio sono corretti). L'unica altra cosa che mi viene in mente è pulire il repository di Maven (almeno org/apache/maven), ma dubito che sarebbe di aiuto.

Potrebbe essere opportuno testare su un progetto più semplice.

+0

mvn -X mostra le versioni più vecchie di jUnit, tuttavia non è il mio poms che le include. Come lo rimuovo? – ripper234

+0

Basta aggiungere junit: junit: 4.8 come dipendenza - cioè come se volessi quella versione. Ho modificato il post. –

+0

Grazie, vedere la domanda aggiornata. – ripper234

2

Per finire la domanda di icyrock.com. Se non ci sono classi di test compilate per target/classi di test, controlla il tuo file pom e assicurati che la confezione non sia "pom".