2010-11-13 13 views
14

Por lo que puedo decir, la ubicación de los archivos de prueba es correcta.Maven/Surefire no encuentra pruebas para ejecutar

Cuando ejecuto "prueba mvn", encuentra cuatro clases llamadas SomethingTest (están ubicadas en la carpeta 'prueba').

Sin embargo, ignora cualquiera de las pruebas jUnit (jUnit 4, anotado con @Test).

¿Cómo puedo depurar esto?

Editar - esto probablemente está relacionado con la versión incorrecta de jUnit que se incluye. Veo esto cuando se ejecuta 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) 

Aunque mi primera dependencia en el pom raíz se encuentra en jUnit 4.8.1, por alguna razón jUnit 3.8.1 se está incluyendo.

Editar 2 - bien, esto no parece ser la respuesta. El Classpath de prueba incluye el jUnit correcto (4) y mis clases de prueba.

Editar 3 - Tuve las clases de prueba llamadas SomethingTester. Cuando lo cambié a SomethingTest, funcionó. Revisé los patrones de inclusión para Surefire, y de hecho no fue configurado para atrapar Something Tester. Doh.

+0

Esto parece muy extraño. ¿Podrías publicar tu pom.xml? –

+0

@seanizer - ¿viste Edit 3? Mis patrones para detectar pruebas simplemente no se configuraron correctamente. – ripper234

+0

oh ya veo, entonces deberías agregar eso como respuesta y aceptarlo –

Respuesta

5

Tal vez esta es la cuestión:

mvn -X imprimiría un montón de ellos, por lo que puede tratar de averiguar si es algo de lo anterior - como no usar la versión de JUnit correcta (por ejemplo, cuando crea desde el artefacto de inicio rápido, creo que el valor predeterminado es 3.8.1), tiene TestNG en el classpath antes de JUnit más o menos.

Editar: Acabo de probar esto en un proyecto simple y la clase dada en el enlace de arriba y funcionó bien. Usé la versión 4.8 de junit, esa es la única dependencia en mi proyecto. Solo para confirmar, estás anotando métodos de prueba con @ org.junit.Test y hay algunas instrucciones org.junit.Assert.assertXXX en estos métodos, ¿correcto?

Edición 2: Para cambiar junit a alguna otra versión, utilice esto:

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

Datos 3: Usted debe tener algo como esto en la ruta de clase de prueba:

[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 

Editar 4: Aceptar , Acabo de crear un proyecto de prueba con artefacto de inicio rápido de maven, agregué dos módulos (también creados con artefacto de inicio rápido), agregué una versión de origen/destino de Java y una dependencia de junit: junit: 4.8 a la pom principal. Cambié solo una de las pruebas a JUnit4 (la otra es JUnit3 por defecto, eso es lo que genera el inicio rápido), mvn clean test de la carpeta principal funcionaba bien.

Es muy probable que sea un problema de configuración del proyecto; puede verificar que su proyecto esté cableado correctamente (es decir, los módulos apuntan al padre, el grupo/artefacto/versiones de proyectos padre/hijo son correctos). La única otra cosa que me viene a la mente es limpiar tu repositorio maven (al menos org/apache/maven), pero dudo que eso ayude.

Podría ser aconsejable probar en un proyecto más simple.

+0

mvn -X muestra versiones antiguas de jUnit, sin embargo, no son mis poms los que las incluyen. ¿Cómo lo elimino? – ripper234

+0

Simplemente agregue junit: junit: 4.8 como una dependencia, es decir, como si quisiera esa versión. Edité la publicación. –

+0

Gracias, vea la pregunta actualizada. – ripper234

2

Para terminar la pregunta de icyrock.com. Si no hay clases de prueba compiladas para target/test-classes, verifique su archivo pom y asegúrese de que el paquete no sea 'pom'.

Cuestiones relacionadas