Tengo un programa maven, se compila bien. Cuando lo ejecuto mvn test
no ejecuta ninguna prueba (en el encabezado TEST dice There are no tests to run.
).
He recreado este problema con una configuración súper simple que incluiré a continuación, así como la salida cuando la ejecute -X
.
Las pruebas unitarias funcionan bien desde eclipse (tanto con su paquete junit predeterminado como cuando incluyo junit.jar descargado por maven). También mvn test-compile
crea correctamente la clase en 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] ------------------------------------------------------------------------
**/*Tests.java
es una inclusión predeterminada.También descubrí que el código de prueba de la 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
Derecha
fuente
<scope>test<scope>
) en elpom.xml
archivo lo hizo por mí.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 lo hizo
<packaging>pom</packaging>
y mis pruebas nunca funcionaron. Lo cambié a<packaging>jar</packaging>
y ahora funciona bien.fuente
package type is pom - so not running tests
- para dar alguna pista a los desarrolladores :(ACTUALIZAR:
Como dijo @scottyseus en los comentarios, a partir de Maven Surefire 2.22.0 lo siguiente es suficiente:
Al usar 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
:Fuente: https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven
fuente
junit-platform-surefire-provider
.surefire-provider
ojupiter-engine
artefactos. Mis pruebas parecen funcionar bien sin ellas, al menos. ver esta respuesta .org.junit.jupiter.api.Test
lugar deorg.junit.Test
cuando usa este complemento o las pruebas no se encontrarán.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<build>
propiedad. Me tomó un tiempo encontrar eso.fuente
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 de Java) para que se ejecuten las pruebas:
<packaging>jar</packaging>
fuente
En mi caso, estaba agregando el motor junit-vintage que lo hace compatible con la versión anterior de las pruebas JUnit y puede ejecutarlas. Como estoy usando JUnit 5.
fuente
Muchas de estas respuestas me fueron bastante útiles en el pasado, pero me gustaría agregar un escenario adicional que me haya costado algún tiempo, ya que puede ayudar a otros en el futuro:
Asegúrese de que las clases y métodos de prueba sean públicos.
Mi problema era que estaba usando una función de generación automática de clases / métodos de prueba de mi IDE (IntelliJ) y por alguna razón los creó como paquete privado. Creo que es más fácil pasarlo por alto de lo que cabría esperar.
fuente
Verifique eso (para jUnit - 4.12 y el complemento Eclipse surefire)
fuente
src/test/java
. La convención de paquetes es para estructura y para permitir el acceso de pruebas a métodos privados de paquetes.Descubierto si prefijas una prueba con 'Resumen', también se ignorará por defecto.
fuente
*/TestAbstractSomeClassName.java
.Lucho con este problema. En mi caso, no estaba importando la anotación @Test correcta .
1) Verifique si el @Test es de org.junit.jupiter.api.Test (si está utilizando Junit 5).
2) Con Junit5 en lugar de
@RunWith(SpringRunner.class)
, use@ExtendWith(SpringExtension.class)
fuente
Si tiene una aplicación Java / Groovy compartida y todo lo que tiene son pruebas unitarias Groovy, entonces Maven no encontrará ninguna prueba. Esto se puede solucionar agregando una prueba de unidad en src / test / java.
fuente
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 prueba de pom (como ya no la necesito), comenzó a funcionar bien para mí.
fuente
Si creó una
Spring Boot
aplicación usando Spring Initializr , las pruebas se ejecutan desde Intellij Idea. Pero, si intenta ejecutar pruebas desde una línea de comandos:Puede que te haya sorprendido que no se hayan realizado pruebas. Traté de agregar
surefire plugin
sin suerte. La respuesta fue simple:pom.xml
contenía la siguiente dependencia:La exclusión,
junit-vintage-engine
está dedicada a mantener la compatibilidad con versiones anterioresJUnit 4.x
. Por lo tanto, las nuevas versiones de Spring Boot Initializr no lo admiten de forma predeterminada. Después de eliminar la exclusión,Maven
comencé a ver las pruebas del proyecto.fuente
Si el nombre de la clase de prueba no sigue la convención de nomenclatura estándar (como se destaca en @axtavt arriba), debe agregar el nombre del patrón / clase en el
pom.xml
para que Maven elija la prueba:fuente
debiera ser
El Maven encuentra esos extremos Prueba o comienza con Prueba para ejecutarse automáticamente.
Sin embargo, puedes usar
para ejecutar tus pruebas
fuente
Aquí está el código exacto que tuve que agregar a mi pom.xml:
Y aquí están mis dependencias:
fuente
Me enfrenté al mismo problema, se resolvió mediante el siguiente cambio en pom.xml:
...
cambiado a:
fuente
Me ocurrió otra razón para no ejecutar los casos de prueba: tenía una propiedad llamada "prueba" para propósitos completamente diferentes, pero interfirió con el complemento infalible. Por lo tanto, verifique sus POM para:
y eliminarlo
fuente
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
:Allí puede agregar (Nuevo ...) o eliminar (Eliminar) cualquier prueba JU (JUnit) que tenga en su proyecto (debajo de la
src/test/java
carpeta o curso).fuente
Si ha escrito sus pruebas en JUnit 4 y ha agregado 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:
fuente
Lo siguiente funcionó bien para mí en Junit 5
https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven
fuente
En mi caso, estamos migrando la aplicación multimódulo a Spring Boot. Lamentablemente, Maven ya no ejecutó todas las pruebas en los módulos. El nombre de las clases de prueba no cambió, estamos siguiendo las convenciones de nombres.
Al final ayudó, cuando agregué la dependencia
surefire-junit47
al complementomaven-surefire-plugin
. Pero no podía explicar por qué, era prueba y error:fuente
Estaba ejecutando casos de prueba de Junit-5 con maven 3.6.2 y siempre mostraba Prueba de ejecución: 0
[
Las pruebas de Junt-5 no se ejecutan bajo el enlace Maven me salvó el día.
fuente
junitArtifactName
También podría ser el caso si el JUnit en uso no es el estándar (junit:junit
) pero, por ejemplo ...fuente
En caso de que alguien haya buscado y no lo resuelva, tenía una biblioteca para diferentes pruebas:
Cuando instalé junit todo funcionó, espero y ayudo esto:
fuente
solía usar este código
a mi pom.xml, solo asegúrese de que el archivo de prueba en específico allí
fuente
Tal problema puede ocurrir cuando usa el complemento surfire 3.x.x + con JUnit5 y, por error, anota la clase de prueba con la
@Test
anotación de JUnit4.Uso:
org.junit.jupiter.api.Test
(JUnit5) en lugar deorg.junit.Test
(Junit4)NOTA: esto puede ser difícil de notar ya que el IDE podría ejecutar esto sin problemas al igual que la prueba JUnit4.
fuente
Otro problema fácil de pasar por alto: asegúrese de que el archivo de su clase tenga la extensión .java
fuente