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.
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.3
和 1.9.3
。我正在使用 junit-bom:5.10.1
.
Was ist der Grund und warum funktioniert Maven ausnahmsweise nicht richtig?
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.1
。 spring-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!