web-dev-qa-db-fra.com

Comment exécuter des tests d'intégration JUnit 5 avec le plugin Maven Failsafe?

Le plugin Maven Failsafe ne trouvera pas mes tests d'intégration JUnit 5 lorsque j'exécute la commande mvn clean failsafe:integration-test, bien qu'il puisse trouver les fichiers.

J'ai le junit-jupiter-api et junit-jupiter-engine comme dépendances de test:

<properties>
    <junit.jupiter.version>5.0.1</junit.jupiter.version>
</properties>

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

Mes tests d'intégration sont nommés correctement (en suivant le **/*IT.Java, **/IT*.Java, ou la **/*ITCase.Java celui inclus par défaut par Failsafe et exclu par défaut par Surefire).

Existe-t-il un moyen d'utiliser les tests JUnit 5 avec Failsafe?

12
Panda TG Attwood

Notez que depuis la documentation JUnit 5 : junit-platform-surefire-provider ne doit plus être utilisé:

En raison de la sortie de Surefire 2.22.0, les junit-platform-surefire-provider de l'équipe JUnit est obsolète et sera abandonné dans une version ultérieure de la plate-forme JUnit.

De plus, vous pouvez également lire le maven-surefire-plugin documentation :

Utilisation de la plate-forme JUnit 5

Pour démarrer avec JUnit Platform, vous devez ajouter au moins une seule implémentation TestEngine à votre projet. Par exemple, si vous souhaitez écrire des tests avec Jupiter, ajoutez l'artefact de test junit-jupiter-engine aux dépendances dans POM

Vous devez donc spécifier cette dépendance test:

<properties>
    <junit-jupiter.version>5.2.0</junit-jupiter.version>
</properties> 

<dependencies>
     [...]
     <dependency>
         <groupId>org.junit.jupiter</groupId>
         <artifactId>junit-jupiter-engine</artifactId>
         <version>${junit-jupiter.version}</version>
         <scope>test</scope>
     </dependency>
     [...] 
</dependencies>

Et le maven-failsafe-plugin la déclaration pourrait être aussi simple que:

<build>
    <plugins>           
        <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.22.0</version>
        </plugin>
    </plugins>
</build>  
6
davidxxx

Modifier: Cette réponse était correcte avant maven-failsafe-plugin:2.22.0. Voir davidxxx's answer pour la solution idéale et la plus récente.


Le maven-failsafe-plugin actuellement ne prend pas en charge JUnit 5 , prêt à l'emploi.

Cependant, comme avec maven-surefire-plugin , vous pouvez exécuter des tests JUnit 5 avec le maven-failsafe-plugin en spécifiant la dépendance sur le org.junit.platform:junit-platform-surefire-provider:1.0.1 avec la version antérieure du maven-failsafe-plugin:2.19.1.

Cela ne fonctionne pas avec la version actuelle 2.20 de la sécurité intégrée (de la même manière que le surefire a l'erreur) en raison d'une OutOfMemory error .

Voir ci-dessous pour un exemple de configuration du plugin:

<properties>
    <junit.platform.version>1.0.1</junit.platform.version>
</properties>

<plugin>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.19.1</version>
    <dependencies>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-surefire-provider</artifactId>
            <version>${junit.platform.version}</version>
        </dependency>
    </dependencies>
</plugin>

Vous pouvez trouver n exemple complet de ce fonctionnement (et un échec) sur GitHub . Pour tester son fonctionnement, vous pouvez exécuter mvn clean failsafe:integration-test.

14
Panda TG Attwood