test plugin mvn example java maven junit junit4 maven-3

java - plugin - Maven no encuentra pruebas JUnit para ejecutar



maven-surefire-plugin (19)

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

Tengo un programa de expertos, se compila bien. Cuando mvn test , no ejecuta ninguna prueba (bajo el encabezado PRUEBAS dice que There are no tests to run. ).

He recreado este problema con una configuración super simple que incluiré a continuación, así como la salida cuando se ejecute con -X .

Las pruebas unitarias se ejecutan bien desde eclipse (tanto con su paquete junit predeterminado como cuando en su lugar incluyo el junit.jar descargado por maven). También mvn test-compile crea correctamente la clase bajo test-classes. 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:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>my_group</groupId> <artifactId>my_program</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>My Program</name> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.1</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> </plugins> </build> </project>

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 ------------------------------------------------------- T E S T S ------------------------------------------------------- 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] ------------------------------------------------------------------------


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

<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.21.0</version> <dependencies> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-surefire-provider</artifactId> <version>1.2.0-M1</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.2.0</version> </dependency> </dependencies> </plugin> </plugins> </build>

Y aquí están mis dependencias:

<dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.2.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.easytesting</groupId> <artifactId>fest-assert-core</artifactId> <version>2.0M10</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-surefire-provider</artifactId> <version>1.2.0-M1</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.2.0-M1</version> </dependency> </dependencies>


Compruebe que (para jUnit - 4.12 y Eclipse surefire plugin)

  1. Agregue la versión jUnit requerida en POM.xml en dependencias. Hacer Maven -> Actualizar proyecto para ver los archivos jar requeridos exportados 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 de cola "Prueba".
  3. Método de prueba en la clase de prueba debe tener la anotación @Test

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

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.21.0</version> <dependencies> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-surefire-provider</artifactId> <version>1.2.0-M1</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.2.0-M1</version> </dependency> </dependencies> </plugin>

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


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

  • Test*
  • *Test
  • *TestCase

Tu clase de prueba no sigue estas convenciones. Debería cambiarle el nombre o configurar Maven Surefire Plugin para usar otro patrón para las clases de prueba.


Descubierto si prefieres una prueba con ''Resumen'' se ignorará por defecto también.


En caso de que alguien haya buscado y no lo solucione, tuve una biblioteca para diferentes pruebas:

<dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>${org.junit.jupiter.version}</version> <scope>test</scope> </dependency>

Cuando instalé Junit, todo funcionó, espero y ayude a esto:

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


En mi caso, fue agregando el motor junit-vintage que lo hace compatible con versiones anteriores de las pruebas de JUnit y puede ejecutarlas. Como estoy usando JUnit 5.

<dependency> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> <scope>test</scope> </dependency>


Maven no ejecutará sus pruebas si el proyecto tiene <packaging>pom</packaging>

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


Otra cosa que puede hacer que Maven no encuentre las pruebas si el paquete del módulo no se declara correctamente.

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


Otra razón para no ejecutar los casos de prueba me sucedió: tenía una propiedad llamada "prueba" para propósitos completamente diferentes, pero interfirió con el complemento surefire. Por lo tanto, por favor revise sus POM para:

<properties> <test>.... </test> ... </properties>

y quitarlo.


Si el nombre de su clase de prueba no sigue la convención de nomenclatura estándar (como se destaca en @axtavt más arriba), debe agregar el nombre del patrón / clase en el pom.xml para que Maven elija la prueba -

... <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <includes> <include>**/*_UT.java</include> </includes> </configuration> </plugin> </plugins> </build> ...


Si ha escrito sus pruebas en JUnit 4 y ha agregado las dependencias de JUnit 5 al complemento surefire, sus pruebas no se ejecutarán.

En ese caso, solo comente las dependencias de JUnit 5 del complemento surefire:

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.19.1</version> <!--<dependencies>--> <!--<dependency>--> <!--<groupId>org.junit.platform</groupId>--> <!--<artifactId>junit-platform-surefire-provider</artifactId>--> <!--<version>1.0.0</version>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>org.junit.jupiter</groupId>--> <!--<artifactId>junit-jupiter-engine</artifactId>--> <!--<version>${junit.version}</version>--> <!--</dependency>--> <!--</dependencies>--> </plugin>


Si tienes una aplicación Java / Groovy compartida y todo lo que tienes son pruebas de unidad Groovy, Maven no encontrará ninguna prueba. Esto se puede arreglar agregando una prueba de unidad en src / test / java.


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

Incorrecto

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

Derecha

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


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

<dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.8</version> <scope>test</scope> </dependency>


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

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

"Esta página le permite administrar las configuraciones de lanzamiento con el recurso seleccionado actualmente"

Allí puede agregar (Nuevo ...) o eliminar (Eliminar) cualquier prueba de 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 ...

<dependency> <groupId>org.eclipse.orbit</groupId> <artifactId>org.junit</artifactId> <version>4.11.0</version> <type>bundle</type> <scope>test</scope> </dependency>


/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 la Prueba para ejecutarse automáticamente.

Sin embargo, puedes usar

mvn surefire:test -Dtest=ClassUnderTestTests.java

para ejecutar sus pruebas.