Maven no encuentra pruebas JUnit para ejecutar

Tengo un progtwig maven, comstack bien. Cuando mvn test , no se ejecutan pruebas (debajo del encabezado TEST dice que There are no tests to run. ).

Recreé este problema con una configuración súper simple que incluiré a continuación, así como la salida cuando corra con -X .

Las pruebas unitarias funcionan bien desde eclipse (tanto con su paquete junit predeterminado como cuando en su lugar incluyo el archivo junit.jar descargado por maven). También mvn test-compile crea correctamente la clase en clases de prueba. Estoy ejecutando esto en OSX 10.6.7 con Maven 3.0.2 y java 1.6.0_24.

Aquí está la estructura del directorio:

 /my_program/pom.xml /my_program/src/main/java/ClassUnderTest.java /my_program/src/test/java/ClassUnderTestTests.java 

pom.xml:

   4.0.0 my_group my_program jar 1.0-SNAPSHOT My Program   junit junit 4.8.1 test      org.apache.maven.plugins maven-compiler-plugin  1.5 1.5      

ClassUnderTest.java:

 public class ClassUnderTest { public int functionUnderTest(int n) { return n; } } 

ClassUnderTestTests.java:

 import org.junit.Assert; import org.junit.Before; import org.junit.Test; public class ClassUnderTestTests { private ClassUnderTest o; @Before public void setUp() { o = new ClassUnderTest(); } @Test public void testFunctionUnderTest_testCase1() { Assert.assertEquals(1, o.functionUnderTest(1)); } @Test public void testFunctionUnderTest_testCase2() { Assert.assertEquals(2, o.functionUnderTest(2)); } } 

Fin de la prueba mvn -X:

 [DEBUG] Configuring mojo org.apache.maven.plugins:maven-surefire-plugin:2.7.1:test from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-surefire-plugin:2.7.1, parent: sun.misc.Launcher$AppClassLoader@5224ee] [DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-surefire-plugin:2.7.1:test' with basic configurator --> [DEBUG] (s) basedir = /Users/aaron/Programs/my_program [DEBUG] (s) childDelegation = false [DEBUG] (s) classesDirectory = /Users/aaron/Programs/my_program/target/classes [DEBUG] (s) disableXmlReport = false [DEBUG] (s) enableAssertions = true [DEBUG] (s) forkMode = once [DEBUG] (s) junitArtifactName = junit:junit [DEBUG] (s) localRepository = id: local url: file:///Users/aaron/.m2/repository/ layout: none [DEBUG] (f) parallelMavenExecution = false [DEBUG] (s) pluginArtifactMap = {org.apache.maven.plugins:maven-surefire-plugin=org.apache.maven.plugins:maven-surefire-plugin:maven-plugin:2.7.1:, org.apache.maven.surefire:surefire-booter=org.apache.maven.surefire:surefire-booter:jar:2.7.1:compile, org.apache.maven.surefire:surefire-api=org.apache.maven.surefire:surefire-api:jar:2.7.1:compile, org.apache.maven.surefire:maven-surefire-common=org.apache.maven.surefire:maven-surefire-common:jar:2.7.1:compile, org.apache.maven.shared:maven-common-artifact-filters=org.apache.maven.shared:maven-common-artifact-filters:jar:1.3:compile, org.codehaus.plexus:plexus-utils=org.codehaus.plexus:plexus-utils:jar:2.0.5:compile, junit:junit=junit:junit:jar:3.8.1:compile, org.apache.maven.reporting:maven-reporting-api=org.apache.maven.reporting:maven-reporting-api:jar:2.0.9:compile} [DEBUG] (s) printSummary = true [DEBUG] (s) project = MavenProject: my_group:my_program:1.0-SNAPSHOT @ /Users/aaron/Programs/my_program/pom.xml [DEBUG] (s) projectArtifactMap = {junit:junit=junit:junit:jar:4.8.1:test} [DEBUG] (s) redirectTestOutputToFile = false [DEBUG] (s) remoteRepositories = [ id: central url: http://repo1.maven.org/maven2 layout: default snapshots: [enabled => false, update => daily] releases: [enabled => true, update => never] ] [DEBUG] (s) reportFormat = brief [DEBUG] (s) reportsDirectory = /Users/aaron/Programs/my_program/target/surefire-reports [DEBUG] (s) session = org.apache.maven.execution.MavenSession@dfbb43 [DEBUG] (s) skip = false [DEBUG] (s) skipTests = false [DEBUG] (s) testClassesDirectory = /Users/aaron/Programs/my_program/target/test-classes [DEBUG] (s) testFailureIgnore = false [DEBUG] (s) testNGArtifactName = org.testng:testng [DEBUG] (s) testSourceDirectory = /Users/aaron/Programs/my_program/src/test/java [DEBUG] (s) trimStackTrace = true [DEBUG] (s) useFile = true [DEBUG] (s) useManifestOnlyJar = true [DEBUG] (s) workingDirectory = /Users/aaron/Programs/my_program [DEBUG] -- end configuration -- [INFO] Surefire report directory: /Users/aaron/Programs/my_program/target/surefire-reports [DEBUG] Setting system property [user.dir]=[/Users/aaron/Programs/my_program] [DEBUG] Setting system property [localRepository]=[/Users/aaron/.m2/repository] [DEBUG] Setting system property [basedir]=[/Users/aaron/Programs/my_program] [DEBUG] Using JVM: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java [DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for /Users/aaron/.m2/repository [DEBUG] dummy:dummy:jar:1.0 (selected for null) [DEBUG] org.apache.maven.surefire:surefire-booter:jar:2.7.1:compile (selected for compile) [DEBUG] org.apache.maven.surefire:surefire-api:jar:2.7.1:compile (selected for compile) [DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-booter/2.7.1/surefire-booter-2.7.1.jar Scope: compile [DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-api/2.7.1/surefire-api-2.7.1.jar Scope: compile [DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for /Users/aaron/.m2/repository [DEBUG] dummy:dummy:jar:1.0 (selected for null) [DEBUG] org.apache.maven.surefire:surefire-junit4:jar:2.7.1:test (selected for test) [DEBUG] org.apache.maven.surefire:surefire-api:jar:2.7.1:test (selected for test) [DEBUG] Adding to surefire test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-junit4/2.7.1/surefire-junit4-2.7.1.jar Scope: test [DEBUG] Adding to surefire test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-api/2.7.1/surefire-api-2.7.1.jar Scope: test [DEBUG] Test Classpath : [DEBUG] /Users/aaron/Programs/my_program/target/test-classes [DEBUG] /Users/aaron/Programs/my_program/target/classes [DEBUG] /Users/aaron/.m2/repository/junit/junit/4.8.1/junit-4.8.1.jar [DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for /Users/aaron/.m2/repository [DEBUG] dummy:dummy:jar:1.0 (selected for null) [DEBUG] org.apache.maven.surefire:surefire-booter:jar:2.7.1:compile (selected for compile) [DEBUG] org.apache.maven.surefire:surefire-api:jar:2.7.1:compile (selected for compile) [DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-booter/2.7.1/surefire-booter-2.7.1.jar Scope: compile [DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-api/2.7.1/surefire-api-2.7.1.jar Scope: compile Forking command line: /bin/sh -c cd /Users/aaron/Programs/my_program && /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java -jar /Users/aaron/Programs/my_program/target/surefire/surefirebooter6118081963679415631.jar /Users/aaron/Programs/my_program/target/surefire/surefire4887918564882595612tmp /Users/aaron/Programs/my_program/target/surefire/surefire9012255138269731406tmp ------------------------------------------------------- TESTS ------------------------------------------------------- There are no tests to run. Results : Tests run: 0, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.089s [INFO] Finished at: Mon May 30 12:03:09 EDT 2011 [INFO] Final Memory: 7M/62M [INFO] ------------------------------------------------------------------------ 

De forma predeterminada, Maven usa las siguientes convenciones de nomenclatura cuando busca pruebas para ejecutar:

  • Test*
  • *Test
  • *TestCase

Su clase de prueba no sigue estas convenciones. Debe cambiar el nombre o configurar Maven Surefire Plugin para usar otro patrón para las clases de prueba.

También encontré que el código de prueba de unidad debe colocarse debajo de la carpeta de prueba, no puede reconocerse como clase de prueba si lo coloca debajo de la carpeta principal. p.ej.

Incorrecto

 /my_program/src/main/java/NotTest.java 

Derecha

 /my_program/src/test/java/MyTest.java 

Otra cosa que puede hacer que Maven no encuentre las pruebas si el paquete del módulo no está declarado correctamente.

En un caso reciente, alguien tenía pom y mis pruebas nunca se ejecutaron. Lo cambié a jar y ahora funciona bien.

Además, verifique si su directorio de clases de prueba (por ejemplo, src / test / java) corresponde al directorio listado en la propiedad en su pom.xml en la propiedad . Me tomó un tiempo encontrar eso.

Cuando uso JUnit 5, me encontré con el mismo problema. Maven Surefire necesita un complemento para ejecutar pruebas JUnit 5. Añada esto a nuestro pom.xml :

  org.apache.maven.plugins maven-surefire-plugin 2.21.0   org.junit.platform junit-platform-surefire-provider 1.2.0-M1   org.junit.jupiter junit-jupiter-engine 5.2.0-M1    

Fuente: https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven

Comprueba que (para el plugin jUnit – 4.12 y Eclipse surefire)

  1. Agregue la versión jUnit requerida en POM.xml en dependencias. Do Maven -> Actualizar el proyecto para ver las jarras necesarias exportadas en el proyecto.
  2. La clase de prueba se encuentra en la carpeta src / test / java y los subdirectorios de esta carpeta (o la carpeta base se puede especificar en POM en config testSourceDirectory). El nombre de la clase debe tener la palabra ‘Prueba’.
  3. El Método de prueba en la clase de prueba debe tener una anotación @ Prueba

Descubierto si prefieres una prueba con ‘Resumen’, también será ignorado por defecto.

Maven no ejecutará tus pruebas si el proyecto tiene pom

Debe configurar el paquete en jar (o algún otro tipo de artefacto java) para que se ejecuten las pruebas: jar

Si tiene una aplicación Java / Groovy compartida y todo lo que tiene son pruebas de unidad Groovy, entonces Maven no encontrará ninguna prueba. Esto puede solucionarse agregando una prueba unitaria bajo src / test / java.

También tuve un problema similar, después de explorar encontré que la dependencia de prueba está causando este problema. Después de eliminar la dependencia de prueba de pom (ya que no la necesito más), comenzó a funcionar bien para mí.

   org.testng testng 6.8 test  

Otra razón para no ejecutar los casos de prueba me pasó a mí: tenía una propiedad llamada “prueba” para fines completamente diferentes, pero interfería con el complemento seguro. Por lo tanto, verifique sus POM para:

  ....  ...  

y eliminarlo.

 /my_program/src/test/java/ClassUnderTestTests.java 

debiera ser

 /my_program/src/test/java/ClassUnderTestTest.java 

El Maven encuentra esos extremos Prueba o comienza con Prueba para ejecutarse automáticamente.

Sin embargo, puedes usar

 mvn surefire:test -Dtest=ClassUnderTestTests.java 

para ejecutar tus pruebas

Un consejo más (además de las respuestas anteriores):

En Eclipse, vaya a Propiedades de su proyecto> haga clic en Run/Debug Settings :

“Esta página le permite administrar configuraciones de inicio con el recurso seleccionado actualmente”

Allí puede agregar (Nuevo …) o eliminar (Eliminar) cualquier prueba JU (JUnit) que tenga en su proyecto (en la carpeta src/test/java , o curso).

junitArtifactName también podría ser el caso si el JUnit en uso no es el estándar ( junit:junit ) pero por ejemplo …

  org.eclipse.orbit org.junit 4.11.0 bundle test  

En caso de que alguien haya buscado y yo no lo resuelva, tenía una biblioteca para diferentes exámenes:

  org.junit.jupiter junit-jupiter-api ${org.junit.jupiter.version} test  

Cuando instalé junit todo funcionó, espero y ayudo esto:

  junit junit 4.11 test  

Si el nombre de la clase de prueba no sigue la convención de nomenclatura estándar (como se destacó en @axtavt arriba), debe agregar el nombre del patrón / clase en pom.xml para que Maven pueda seleccionar la prueba:

 ...    org.apache.maven.plugins maven-surefire-plugin   **/*_UT.java      ... 

Aquí está el código exacto que tuve que agregar a mi pom.xml:

     org.apache.maven.plugins maven-surefire-plugin 2.21.0   org.junit.platform junit-platform-surefire-provider 1.2.0-M1   org.junit.jupiter junit-jupiter-engine 5.2.0      

Y aquí están mis dependencias:

    org.junit.jupiter junit-jupiter-api 5.2.0 test   org.easytesting fest-assert-core 2.0M10 test   org.junit.platform junit-platform-surefire-provider 1.2.0-M1   org.junit.jupiter junit-jupiter-engine 5.2.0-M1