Heim > Java > 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
Freigeben: 2024-02-13 14:00:10
nach vorne
598 Leute haben es durchsucht

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>
Nach dem Login kopieren

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]
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage