Heim  >  Artikel  >  Obwohl ich JUnit5 in meinem POM verwende, ist das Maven-Surefire-Plugin immer noch standardmäßig auf JUnit4 eingestellt

Obwohl ich JUnit5 in meinem POM verwende, ist das Maven-Surefire-Plugin immer noch standardmäßig auf JUnit4 eingestellt

WBOY
WBOYnach vorne
2024-02-13 14:00:10504Durchsuche

Obwohl ich JUnit5 in meinem Pom verwende, ist das Maven-Surefire-Plugin immer noch standardmäßig auf JUnit4 eingestellt. Dies kann insbesondere bei der Verwendung neuer Funktionen von JUnit5 zu Problemen führen. Um dieses Problem zu lösen, können wir das Surefire-Plugin anweisen, JUnit5 als Standard-Testläufer zu verwenden, indem wir die POM-Datei konfigurieren. Im Build-Tag der POM-Datei müssen wir ein Plugins-Tag hinzufügen und darin das Maven-Surefire-Plugin konfigurieren. In der Konfiguration müssen wir testFrameworkProviderName als org.junit.platform.surefire.provider.JUnitPlatformProvider angeben. Wenn wir den Befehl mvn test ausführen, verwendet das Surefire-Plugin auf diese Weise JUnit5, um die Tests auszuführen. Diese Konfiguration stellt sicher, dass wir Tests normal ausführen können, während wir JUnit5 verwenden.

Frageninhalt

Ich habe diesen Artikel gelesen. Das ist mein Eltern-Pom:

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

Wenn ich in meinem Teilprojekt kein junit 依赖项。当我运行 mvn install habe, sehe ich Folgendes:

[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]

Warum wird der Anbieter automatisch erkannt org.apache.maven.surefire.junit4.junit4provider? Es sollte junit5 verwenden!

Wenn ich laufe mvn dependency:tree, sehe ich Folgendes:

[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

Es ist auch seltsam, weil ich dabei bin pom.xml 中没有使用版本 5.9.31.9.3 。我正在使用 junit-bom:5.10.1.

Was ist der Grund und warum funktioniert Maven ausnahmsweise nicht richtig?

Lösung

Das liegt daran:

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

Im Abhängigkeitsbaum. Das Entfernen der Abhängigkeit von pom.xml 中对 junit-platform-runner löste das Problem.

In meinem Fall lag das daran, dass ich auch eine transitive Referenz von spring-boot-dependency:3.1.5 在我的 dependencymanagement 中,它优先于 junit-bom:5.10.1spring-boot-dependency:3.1.5 具有对 junit-bom:5.9.3 zitiert habe.

Das obige ist der detaillierte Inhalt vonObwohl ich JUnit5 in meinem POM verwende, ist das Maven-Surefire-Plugin immer noch standardmäßig auf JUnit4 eingestellt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen