Maison  >  Article  >  Même si j'utilise JUnit5 dans mon pom, le plugin maven Surefire est toujours JUnit4 par défaut.

Même si j'utilise JUnit5 dans mon pom, le plugin maven Surefire est toujours JUnit4 par défaut.

WBOY
WBOYavant
2024-02-13 14:00:10504parcourir

Même si j'utilise JUnit5 dans mon pom, le plugin maven Surefire est toujours par défaut JUnit4. Cela peut poser certains problèmes, notamment lors de l'utilisation des nouvelles fonctionnalités de JUnit5. Pour résoudre ce problème, nous pouvons demander au plugin Surefire d'utiliser JUnit5 comme exécuteur de test par défaut en configurant le fichier pom. Dans la balise build du fichier pom, nous devons ajouter une balise plugins et y configurer maven-surefire-plugin. Dans la configuration, nous devons spécifier testFrameworkProviderName comme org.junit.platform.surefire.provider.JUnitPlatformProvider. De cette façon, lorsque nous exécuterons la commande mvn test, le plugin Surefire utilisera JUnit5 pour exécuter les tests. Cette configuration garantit que nous pouvons exécuter des tests normalement tout en utilisant JUnit5.

Contenu de la question

J'ai lu cet article. C'est mon pompon parent :

<dependencymanagement>
<dependencies>
<dependency>
            <groupid>org.junit</groupid>
            <artifactid>junit-bom</artifactid>
            <version>5.10.1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
...
    <dependencies>
<dependency>
        <groupid>org.junit.jupiter</groupid>
        <artifactid>junit-jupiter-engine</artifactid>        
        <scope>test</scope>
    </dependency>

        <!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-launcher -->
<dependency>
    <groupid>org.junit.platform</groupid>
    <artifactid>junit-platform-launcher</artifactid>    
    <scope>test</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-runner -->
<dependency>
    <groupid>org.junit.platform</groupid>
    <artifactid>junit-platform-runner</artifactid>    
    <scope>test</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-console-standalone -->
<dependency>
    <groupid>org.junit.platform</groupid>
    <artifactid>junit-platform-console-standalone</artifactid>
    <version>1.10.1</version>
    <scope>test</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-commons -->
<dependency>
    <groupid>org.junit.platform</groupid>
    <artifactid>junit-platform-commons</artifactid>    
    <scope>test</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-engine -->
<dependency>
    <groupid>org.junit.platform</groupid>
    <artifactid>junit-platform-engine</artifactid>    
    <scope>test</scope>
</dependency>
...
<plugin>
                <groupid>org.apache.maven.plugins</groupid>
                <artifactid>maven-surefire-plugin</artifactid>
                <version>3.2.1</version>
                <configuration>
            <argline>--enable-preview --add-modules jdk.incubator.vector</argline>
        </configuration>
            </plugin>

Quand je n'en ai pas junit 依赖项。当我运行 mvn install dans mon sous-projet, je vois ceci :

[info] --- surefire:3.2.1:test (default-test) @ xxx ---
[info] toolchain in maven-surefire-plugin: jdk[/library/java/jdk-21.0.1.jdk/contents/home]
[info] using auto detected provider org.apache.maven.surefire.junit4.junit4provider
[info]
[info] -------------------------------------------------------
[info]  t e s t s
[info] -------------------------------------------------------
warning: using incubator modules: jdk.incubator.vector
[info]
[info] results:
[info]
[info] tests run: 0, failures: 0, errors: 0, skipped: 0
[info]

Pourquoi le fournisseur est-il automatiquement détecté org.apache.maven.surefire.junit4.junit4provider ? Il devrait utiliser Junit5 !

Quand je cours mvn dependency:tree je vois ça :

[INFO] --- dependency:3.6.0:tree (default-cli) @ xxx ---
[INFO] xxx:xxx:jar:1.0.0-SNAPSHOT
[INFO] +- org.eclipse.collections:eclipse-collections:jar:11.1.0:compile
[INFO] |  \- org.eclipse.collections:eclipse-collections-api:jar:11.1.0:compile
[INFO] +- org.slf4j:slf4j-api:jar:2.0.9:compile
[INFO] +- com.google.guava:guava:jar:32.1.2-jre:compile
[INFO] |  +- com.google.guava:failureaccess:jar:1.0.1:compile
[INFO] |  +- com.google.guava:listenablefuture:jar:9999.0-empty-to-avoid-conflict-with-guava:compile
[INFO] |  +- com.google.code.findbugs:jsr305:jar:3.0.2:compile
[INFO] |  +- com.google.errorprone:error_prone_annotations:jar:2.18.0:compile
[INFO] |  \- com.google.j2objc:j2objc-annotations:jar:2.8:compile
[INFO] +- org.assertj:assertj-core:jar:3.24.2:test
[INFO] |  \- net.bytebuddy:byte-buddy:jar:1.14.9:test
[INFO] +- org.junit.jupiter:junit-jupiter-engine:jar:5.9.3:test
[INFO] |  +- org.junit.jupiter:junit-jupiter-api:jar:5.9.3:test
[INFO] |  \- org.apiguardian:apiguardian-api:jar:1.1.2:test
[INFO] +- org.junit.platform:junit-platform-launcher:jar:1.9.3:test
[INFO] +- org.junit.platform:junit-platform-runner:jar:1.9.3:test
[INFO] |  +- junit:junit:jar:4.13.2:test
[INFO] |  |  \- org.hamcrest:hamcrest-core:jar:2.2:test
[INFO] |  |     \- org.hamcrest:hamcrest:jar:2.2:test
[INFO] |  +- org.junit.platform:junit-platform-suite-api:jar:1.9.3:test
[INFO] |  \- org.junit.platform:junit-platform-suite-commons:jar:1.9.3:test
[INFO] +- org.junit.platform:junit-platform-console-standalone:jar:1.10.1:test
[INFO] +- org.junit.platform:junit-platform-commons:jar:1.9.3:test
[INFO] +- org.junit.platform:junit-platform-engine:jar:1.9.3:test
[INFO] |  \- org.opentest4j:opentest4j:jar:1.2.0:test
[INFO] \- org.checkerframework:checker-qual:jar:3.42.0:compile

C’est aussi bizarre parce que je suis en pom.xml 中没有使用版本 5.9.31.9.3 。我正在使用 junit-bom:5.10.1.

Quelle est la raison et pourquoi maven ne fonctionne pas correctement pour une fois ?

Solution

C'est parce que :

[INFO] +- org.junit.platform:junit-platform-runner:jar:1.9.3:test
[INFO] |  +- junit:junit:jar:4.13.2:test

Dans l'arborescence des dépendances. La suppression de la dépendance de pom.xml 中对 junit-platform-runner a résolu le problème.

Dans mon cas, c'est parce que j'ai également cité une référence transitive de spring-boot-dependency:3.1.5 在我的 dependencymanagement 中,它优先于 junit-bom:5.10.1spring-boot-dependency:3.1.5 具有对 junit-bom:5.9.3.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer