Rumah > Java > Walaupun saya menggunakan JUnit5 dalam pom saya, pemalam Surefire maven masih lalai kepada JUnit4

Walaupun saya menggunakan JUnit5 dalam pom saya, pemalam Surefire maven masih lalai kepada JUnit4

WBOY
Lepaskan: 2024-02-13 14:00:10
ke hadapan
599 orang telah melayarinya

Walaupun saya menggunakan JUnit5 dalam pom saya, pemalam Surefire maven masih lalai kepada JUnit4. Ini boleh menyebabkan beberapa masalah, terutamanya apabila menggunakan ciri baharu JUnit5. Untuk menyelesaikan masalah ini, kami boleh memberitahu pemalam Surefire untuk menggunakan JUnit5 sebagai pelari ujian lalai dengan mengkonfigurasi fail pom. Dalam teg binaan fail pom, kita perlu menambah teg pemalam dan mengkonfigurasi pemalam maven-surefire di dalamnya. Dalam konfigurasi, kita perlu menentukan testFrameworkProviderName sebagai org.junit.platform.surefire.provider.JUnitPlatformProvider. Dengan cara ini, apabila kita menjalankan perintah ujian mvn, pemalam Surefire akan menggunakan JUnit5 untuk menjalankan ujian. Konfigurasi ini memastikan bahawa kami boleh menjalankan ujian seperti biasa semasa menggunakan JUnit5.

Kandungan soalan

Saya telah membaca artikel ini. Ini adalah pom ibu bapa saya:

<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>
Salin selepas log masuk

Apabila saya tidak mempunyai apa-apa junit 依赖项。当我运行 mvn install dalam subprojek saya, saya melihat perkara berikut:

[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]
Salin selepas log masuk

Mengapa pembekal dikesan secara automatik org.apache.maven.surefire.junit4.junit4provider? Ia sepatutnya menggunakan junit5!

Apabila saya berlari mvn dependency:tree Saya melihat ini:

[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
Salin selepas log masuk

Pelik juga sebab saya masuk pom.xml 中没有使用版本 5.9.31.9.3 。我正在使用 junit-bom:5.10.1.

Apakah sebabnya dan mengapa maven tidak berfungsi dengan baik untuk sekali?

Penyelesaian

Ini kerana:

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

Dalam pokok pergantungan. Mengeluarkan pergantungan pom.xml 中对 junit-platform-runner menyelesaikan masalah.

Dalam kes saya, ini adalah kerana saya turut memetik rujukan transitif spring-boot-dependency:3.1.5 在我的 dependencymanagement 中,它优先于 junit-bom:5.10.1spring-boot-dependency:3.1.5 具有对 junit-bom:5.9.3.

Atas ialah kandungan terperinci Walaupun saya menggunakan JUnit5 dalam pom saya, pemalam Surefire maven masih lalai kepada JUnit4. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan