首頁 >Java >即使我在 pom 中使用 JUnit5,maven Surefire 插件仍然預設為 JUnit4

即使我在 pom 中使用 JUnit5,maven Surefire 插件仍然預設為 JUnit4

WBOY
WBOY轉載
2024-02-13 14:00:10596瀏覽

即使我在 pom 中使用 JUnit5,maven Surefire 外掛程式仍然預設為 JUnit4。這可能會導致一些問題,特別是在使用 JUnit5 的新特性時。為了解決這個問題,我們可以透過設定 pom 檔案來告訴 Surefire 外掛程式使用 JUnit5 作為預設測試運行器。在 pom 檔案的 build 標籤中,我們需要新增一個 plugins 標籤,並在其中配置 maven-surefire-plugin。在設定中,我們需要指定 testFrameworkProviderName 為 org.junit.platform.surefire.provider.JUnitPlatformProvider。這樣,當我們執行 mvn test 指令時,Surefire 外掛程式將使用 JUnit5 來執行測試。這個設定可以確保我們在使用 JUnit5 的同時,也能夠正常運作測試。

問題內容

我讀過這篇文章。這是我的父 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>

在我的子專案中,我沒有任何 junit 依賴項。當我執行 mvn install 時,我看到以下內容:

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

為什麼自動偵測到的提供者是 org.apache.maven.surefire.junit4.junit4provider?它應該使用 junit5!

當我執行 mvn dependency:tree 時,我看到這個:

[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

這也很奇怪,因為我在 pom.xml 中沒有使用版本 5.9.31.9.3 。我正在使用 junit-bom:5.10.1

什麼原因以及為什麼 maven 一次不能正常工作?

解決方法

這是因為:

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

在依賴樹中。刪除 pom.xml 中對 junit-platform-runner 的依賴解決了該問題。

就我而言,這是因為我還引用了spring-boot-dependency:3.1.5 在我的dependencymanagement 中,它優先於junit-bom:5.10.1spring-boot-dependency:3.1.5 具有對 junit-bom:5.9.3 的傳遞參考。

以上是即使我在 pom 中使用 JUnit5,maven Surefire 插件仍然預設為 JUnit4的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除