Maven no encuentra pruebas JUnit para ejecutar

416

Tengo un programa maven, se compila bien. Cuando lo ejecuto mvn testno 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-compilecrea 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] ------------------------------------------------------------------------
Zugwalt
fuente

Respuestas:

667

Por defecto, Maven usa las siguientes convenciones de nomenclatura cuando busca pruebas para ejecutar:

Si su clase de prueba no sigue estas convenciones, debe cambiarle el nombre o configurar Maven Surefire Plugin para usar otro patrón para las clases de prueba.

axtavt
fuente
44
Me resulta más atractivo cambiar la configuración de Maven. Esta convención de nomenclatura representa un peligro para los usuarios inexpertos. Al nombrar sus casos de prueba como SomethingTest1, SomethingTest2 daría como resultado que las pruebas silenciosamente no se ejecuten. Maven no puede hacer esto por compatibilidad con versiones anteriores, pero parece más lógico buscar casos de prueba en todos los archivos.
Tobias Kremer
8
Nunca supe esto: tuve dos casos que terminaron con "Pruebas", y Maven se negó a ejecutarlos ... cambió a "Prueba", y todo está bien en el gremio de piruletas nuevamente. Gracias.
demaniak
2
@Tobias Estoy de acuerdo con su punto sobre el peligro impuesto con la convención de nomenclatura. También rompe el patrón implicado por el uso de anotaciones. Un resultado implícito del uso de anotaciones es que se pueden buscar clases / métodos que tengan una anotación específica. Esperaba que Maven no estableciera la restricción de la convención de nomenclatura y, en cambio, solo confiara en escanear los métodos anotados de @Test en cualquier clase.
Angad
2
Tenga en cuenta que la documentación segura ahora afirma que **/*Tests.javaes una inclusión predeterminada.
Gareth
11
Pregunta: Entonces, ¿por qué anotar con @test si tiene que seguir la convención Test * de todos modos?
dynex
88

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

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

Derecha

/my_program/src/test/java/MyTest.java
Robin Ma
fuente
3
Thaaank usted! Esto y establecer el alcance para probar ( <scope>test<scope>) en el pom.xmlarchivo lo hizo por mí.
dinesharjani
Me encontré con esto, cuidado con las pruebas vs prueba. El correcto es la prueba
Bruck Wubete
72

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.

Jon
fuente
44
Excelente sugerencia! Demuestra los peligros de 'copiar y pegar' al dividir un artefacto Maven de un solo módulo en múltiples.
morsor
44
Desearía que Maven imprimiera un mensaje - package type is pom - so not running tests- para dar alguna pista a los desarrolladores :(
Arun Avanathan
60

ACTUALIZAR:

Como dijo @scottyseus en los comentarios, a partir de Maven Surefire 2.22.0 lo siguiente es suficiente:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.1</version>
</plugin>

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:

<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

teyzer
fuente
Estoy obteniendo un "no encontrado" para junit-platform-surefire-provider.
Arya Pourtabatabaie
2
Tenga en cuenta que con el éxito seguro de 2,22, no debería ser necesario añadir las dependencias de los surefire-providero jupiter-engineartefactos. Mis pruebas parecen funcionar bien sin ellas, al menos. ver esta respuesta .
scottysseus
También vale la pena señalar que debe usar en org.junit.jupiter.api.Testlugar de org.junit.Testcuando usa este complemento o las pruebas no se encontrarán.
austin_ce
30

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.

t3rmin41
fuente
13

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>

robjwilkins
fuente
12

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.

<dependency>
        <groupId>org.junit.vintage</groupId>
        <artifactId>junit-vintage-engine</artifactId>
        <scope>test</scope>
</dependency>
Duc Tran
fuente
Creo que SpringBoot solo incluye lo que usa. Tiene sentido que tenga que especificar sus dependencias según sus necesidades. De lo contrario, importará un montón de bibliotecas que no usa.
Duc Tran
12

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.

João Matos
fuente
1
Este es el problema que tuve también, por alguna razón IntelliJ está creando pruebas como paquete privado y Maven no puede verlas. Al cambiar la clase y el método @Test a maven público, se ejecutan las pruebas.
AlexC
Resuelto mi problema! Tenga en cuenta que esto no se aplica a JUnit 5+. Supongo que el generador de código de IntelliJ asume que estás usando la última versión.
lamino
@lamino Estaba usando junit5 y estaba fallando porque mi método de prueba no era público
SudhirKumar
Un poco descarado por parte de IntelliJ para decirme que los métodos pueden ser privados de paquetes ...
Wecherowski
9

Verifique eso (para jUnit - 4.12 y el complemento Eclipse surefire)

  1. Agregue la versión requerida de jUnit en POM.xml en dependencias. Haga Maven -> Actualice el proyecto para ver los frascos requeridos exportados en el proyecto.
  2. La clase de prueba está bajo 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 tailng 'Test'.
  3. El método de prueba en la clase de prueba debe tener la anotación @Test
Mitra
fuente
1
Esto es más un problema de configuración de Java, pero además de nombrar la clase de prueba correctamente y colocar el archivo de prueba en el directorio de prueba bajo src, el nombre del paquete de la clase de prueba debe coincidir con el nombre del paquete de la clase que está probando.
Paul
2
@Paul False: Maven ejecutará todas las clases que coincidan con la convenciónsrc/test/java . La convención de paquetes es para estructura y para permitir el acceso de pruebas a métodos privados de paquetes.
Michael K
9

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

usuario1016765
fuente
1
maven.apache.org/guides/getting-started `` `Y las exclusiones predeterminadas son: * / Abstract Test.java * / Abstract TestCase.java` ``
Antoine Meyer
También parece ignorar */TestAbstractSomeClassName.java.
Collin Krawll
6

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)

import org.junit.jupiter.api.Test;

@ExtendWith(SpringExtension.class)
@SpringBootTest
@AutoConfigureMockMvc
@TestPropertySource(locations = "classpath:application.properties")    
public class CotacaoTest {
    @Test
    public void testXXX() {

    }
}
edubriguenti
fuente
4

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.

bruce szalwinski
fuente
4

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í.

    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>6.8</version>
        <scope>test</scope>
    </dependency>
rajesh madhavan
fuente
4

Si creó una Spring Bootaplicación usando Spring Initializr , las pruebas se ejecutan desde Intellij Idea. Pero, si intenta ejecutar pruebas desde una línea de comandos:

mvn clean test

Puede que te haya sorprendido que no se hayan realizado pruebas. Traté de agregar surefire pluginsin suerte. La respuesta fue simple: pom.xmlcontenía la siguiente dependencia:

     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
           <exclusion>
              <groupId>org.junit.vintage</groupId>
              <artifactId>junit-vintage-engine</artifactId>
           </exclusion>
        </exclusions>
     </dependency>

La exclusión, junit-vintage-engineestá dedicada a mantener la compatibilidad con versiones anteriores JUnit 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, Mavencomencé a ver las pruebas del proyecto.

Exterminador13
fuente
3

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.xmlpara 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> 
...
Saikat
fuente
2
/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

Boris Z.
fuente
2

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>
anon58192932
fuente
2

Me enfrenté al mismo problema, se resolvió mediante el siguiente cambio en pom.xml:

<build>
    <testSourceDirectory>test</testSourceDirectory>

...

cambiado a:

<build>
    <testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
ShayneR
fuente
1

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:

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

y eliminarlo

Rusi Popov
fuente
1

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 configuraciones de inicio con el recurso seleccionado actualmente"

Allí puede agregar (Nuevo ...) o eliminar (Eliminar) cualquier prueba JU (JUnit) que tenga en su proyecto (debajo de la src/test/javacarpeta o curso).

datv
fuente
1

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:

        <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>
youhans
fuente
1

Lo siguiente funcionó bien para mí en Junit 5

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

<build>
    <plugins>
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.0</version>
        </plugin>
        <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.22.0</version>
        </plugin>
    </plugins>
</build>
<!-- ... -->
<dependencies>
    <!-- ... -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.4.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.4.0</version>
        <scope>test</scope>
    </dependency>
    <!-- ... -->
</dependencies>
<!-- ... -->
AS Ranjan
fuente
1

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-junit47al complemento maven-surefire-plugin. Pero no podía explicar por qué, era prueba y error:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<dependencies>
  <dependency>
    <groupId>org.apache.maven.surefire</groupId>
    <artifactId>surefire-junit47</artifactId>
    <version>${maven-surefire-plugin.version}</version>
  </dependency>
</dependencies>

Michael Hegner
fuente
1

Estaba ejecutando casos de prueba de Junit-5 con maven 3.6.2 y siempre mostraba Prueba de ejecución: 0

[

INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  8.547 s
[INFO] Finished at: 2019-12-22T00:03:37-08:00
[INFO] ------------------------------------------------------------------------

Las pruebas de Junt-5 no se ejecutan bajo el enlace Maven me salvó el día.

Vijay Kumar Rajput
fuente
0

junitArtifactNameTambié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>
Tuomas Kiviaho
fuente
0

En caso de que alguien haya buscado y no lo resuelva, tenía 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 ayudo esto:

<dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
hizmarck
fuente
0

solía usar este código

<sourceDirectory>src_controller</sourceDirectory>
  <testSourceDirectory>src_test</testSourceDirectory>

a mi pom.xml, solo asegúrese de que el archivo de prueba en específico allí

<suiteXmlFile>/Users/mac/xxx/xxx/xx.xxxx.xx/xxx.restassured.xx/testng.xml</suiteXmlFile>
Prasetyo Budi
fuente
0

Tal problema puede ocurrir cuando usa el complemento surfire 3.x.x + con JUnit5 y, por error, anota la clase de prueba con la @Testanotación de JUnit4.

Uso: org.junit.jupiter.api.Test(JUnit5) en lugar de org.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.

walkeros
fuente
0

Otro problema fácil de pasar por alto: asegúrese de que el archivo de su clase tenga la extensión .java

Mark W
fuente