156 votes

Surefire ne ramasse pas les tests Junit 5

J'ai écrit une méthode de test simple avec JUnit 5:

 public class SimlpeTest {
    @Test
    @DisplayName("Some description")
    void methodName() {
        // Testing logic for subject under test
    }
}
 

Mais quand je lance mvn test , j'ai:

 -------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running SimlpeTest
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
 

D'une manière ou d'une autre, Surefire n'a pas reconnu cette classe de test. Mon pom.xml ressemble à:

 <properties>
    <java.version>1.8</java.version>
    <junit.version>5.0.0-SNAPSHOT</junit.version>
</properties>

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

<repositories>
    <repository>
        <id>snapshots-repo</id>
        <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        <releases>
            <enabled>false</enabled>
        </releases>
        <snapshots>
            <updatePolicy>always</updatePolicy>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
            </configuration>
        </plugin>
    </plugins>
</build>
 

Une idée de comment faire ce travail?

138voto

Tunaki Points 2663

L' maven-surefire-plugin, à compter d'aujourd'hui, ne pas avoir le plein soutien de JUnit 5. Il y a un sujet ouvert sur l'ajout de ce soutien INFAILLIBLE-1206.

En tant que tel, vous devez utiliser un fournisseur personnalisé. L'un a déjà été développé par la JUnit équipe; à partir du guide de l'utilisateur, vous devez ajouter l' junit-platform-surefire-provider fournisseur et l' TestEngine de la mise en œuvre de la nouvelle API:

<build>
  <plugins>        
    <plugin>
      <artifactId>maven-surefire-plugin</artifactId>
      <!-- latest version (2.20.1) does not work well with JUnit5 -->
      <version>2.19.1</version>
      <dependencies>
        <dependency>
          <groupId>org.junit.platform</groupId>
          <artifactId>junit-platform-surefire-provider</artifactId>
          <version>1.0.3</version>
        </dependency>
        <dependency>
          <groupId>org.junit.jupiter</groupId>
          <artifactId>junit-jupiter-engine</artifactId>
          <version>5.0.3</version>
        </dependency>
      </dependencies>
    </plugin>
  </plugins>
</build>

Aussi, assurez-vous de déclarer l' junit-jupiter-api de dépendance avec un périmètre d' test:

<dependencies>
  <dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.0.3</version>
    <scope>test</scope>
  </dependency>
</dependencies>

79voto

Mikhail Kholodkov Points 3238

Mise à jour 2

Problème a été corrigé dans Maven Plugin Surefire v2.22.0

La nouvelle version est disponible au Dépôt Central de Maven.

Maven

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

Gradle

compile group: 'org.apache.maven.plugins', name: 'maven-surefire-plugin', version: '2.22.0'

Mise à jour

Comme Marian souligné, la dernière version de JUnit 5 Plate-forme de Surefire Fournisseur (1.2.0) prend en charge la dernière version de Maven Plugin Surefire (2.21.0):

        <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</version>
                </dependency>
            </dependencies>
        </plugin>



Exemple

pom.xml

<dependencies>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.2.0</version>
        <scope>test</scope>
    </dependency>
</dependencies>

<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</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

TestScenario.java

package test;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

public class TestScenario {

    @Test
    @DisplayName("Test 2 + 2 = 4")
    public void test() {
        Assertions.assertEquals(4, 2 + 2);
    }
}

De sortie (mvn clean install)

...
[INFO] --- maven-surefire-plugin:2.21.0:test (par défaut) @ test --- [INFO]
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] essai de fonctionnement.TestScenario
[INFO] exécution des Tests: 1, Failures: 0, Erreurs: 0, Ignorées: 0, Temps écoulé: 0.005 s - dans l'essai.TestScenario
[INFO]
[INFO] les Résultats:
[INFO]
[INFO] exécution des Tests: 1, Pannes: 0 Erreurs: 0, Ignorées: 0
...


Façon la plus simple jusqu'à aujourd'hui:

    <plugin>
        <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.1.0</version>
            </dependency>
        </dependencies>
    </plugin>

9voto

Fabien Marsaud Points 41

J'ai rencontré ce problème avec JUnit5 et Maven, mais également remarqué que, même si seulement junit-jupiter-moteur a été ajouté comme une dépendance, les tests exécutés sur certains projets, pas sur d'autres. Et j'ai une sorte de schéma est le même dans les commentaires ici: @Alex commentaire ci-dessus, vous pouvez voir il n'a pas de problème, même avec les versions antérieures de surefire/junit/plate-forme.

Après de me gratter la tête depuis quelques temps j'ai réalisé que les projets pour lesquels les tests ne serait pas exécuter les tests de la méthode de noms dit de ne pas contenir le mot "test". Mais ce n'est pas mandaté par http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html

En d'autres termes: juste avec

    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.2.0</version>
        <scope>test</scope>
    </dependency>

cette

@Test
public void something() {
    assertTrue(true);
}

ne sera PAS exécutée, alors que

@Test
public void testSomething() {
    assertTrue(true);
}

SERA exécuté !

Ce problème se déploie comme une poupée russe...

De toute façon, +1 pour @Mikhail Kholodkov dont la mise à jour de répondre à des corrections de toutes les questions à la fois!

6voto

schnell18 Points 135

Pour compléter, surefire 2.22.0 + junit 5.2.0 + plateforme 1.2.0 fonctionne également. Ci-joint un pom de travail pour votre referecne:

     <?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>org.jjhome.junit5</groupId>
    <artifactId>junit5-hone</artifactId>
    <packaging>jar</packaging>
    <version>1.0.0-SNAPSHOT</version>
    <name>junit5-home</name>

    <properties>
        <maven.compiler.source>1.6</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <junit5.version>5.2.0</junit5.version>
        <platform.version>1.2.0</platform.version>
        <surefire.version>2.22.0</surefire.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit5.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>${junit5.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit5.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
            <version>${junit5.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <version>${platform.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-runner</artifactId>
            <version>${platform.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

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

1voto

avandeursen Points 1597

J'ai eu un problème similaire également à l'origine Infaillible pour reconnaître la zéro tests.

Mon problème s'est avéré être les suivantes (à partir de la JUnit 5.1.0 / maven de la documentation):

En raison d'une fuite de mémoire dans Surefire 2.20 et de problèmes de fonctionnement sur Java 9, junit-plate-forme-surefire-fournisseur fonctionne actuellement uniquement avec Surefire articles 2.19.1.

J'ai essayé d'utiliser les dernières versions de Surefire (2.21.0) et junit-plate-forme-surefire-fournisseur (1.1.0), et il ne fonctionne pas (ni en Java 8 ou 9)

En revenant à Infaillible articles 2.19.1 résolu mon problème.

Conformément à ce problème une solution sera inclus dans la version 1.2.0 de junit-plate-forme-surefire-fournisseur (actuellement disponible en INSTANTANÉ).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X