Saya menulis metode pengujian sederhana dengan JUnit 5:
public class SimlpeTest {
@Test
@DisplayName("Some description")
void methodName() {
// Testing logic for subject under test
}
}
Tapi ketika saya lari mvn test
, saya mendapat:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running SimlpeTest
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
Entah bagaimana, pasti tidak mengenali kelas tes itu. Saya pom.xml
terlihat seperti:
<properties>
<java.version>1.8</java.version>
<junit.version>5.0.0-SNAPSHOT</junit.version>
</properties>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit5-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>snapshots-repo</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<updatePolicy>always</updatePolicy>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
Ada ide bagaimana membuat ini bekerja?
Jawaban:
The
maven-surefire-plugin
, pada hari ini, tidak memiliki dukungan penuh dari JUnit 5 . Ada masalah terbuka tentang menambahkan dukungan ini di SUREFIRE-1206 .Karena itu, Anda perlu menggunakan penyedia khusus . Satu telah dikembangkan oleh tim JUnit; dari panduan pengguna , Anda perlu menambahkan
junit-platform-surefire-provider
penyedia danTestEngine
implementasi untuk API baru:Selain itu, pastikan untuk mendeklarasikan
junit-jupiter-api
dependensi dengan cakupantest
:sumber
maven-surefire-plugin v2.21.0
berfungsi dengan baik denganjunit-jupiter-engine v5.2.0
danjunit-platform-surefire-provider v1.2.0
Perbarui 2
Masalah telah diperbaiki di Maven Surefire Plugin v2.22.0
Versi baru tersedia di Maven Central Repository.
Maven
Gradle
Memperbarui
Seperti yang ditunjukkan Marian , versi terbaru JUnit 5 Platform Surefire Provider (1.2.0) mendukung versi terbaru Plugin Maven Surefire (2.21.0) :
Contoh
pom.xml
TestScenario.java
Output (pemasangan bersih mvn)
Cara termudah hingga hari ini:
sumber
Dari dokumentasi JUnit 5 :
Selain itu, Anda dapat membaca di
maven-surefire-plugin
dokumentasi :Jadi itu sudah cukup untuk menjalankan tes JUnit 5:
Di ruang GitHub saya, saya menambahkan proyek sampel maven yang berfungsi yang dapat Anda telusuri / klon.
URL: https://github.com/ebundy/junit5-minimal-maven-project
sumber
Saya mengalami masalah ini dengan JUnit5 dan Maven tetapi juga memperhatikan bahwa, meskipun hanya mesin junit-jupiter yang ditambahkan sebagai ketergantungan, pengujian akan berjalan pada beberapa proyek, bukan pada yang lain . Dan saya melihat pola yang sama di komentar di sini: Dalam komentar @Alex di atas Anda dapat melihat dia tidak memiliki masalah apa pun, bahkan dengan versi surefire / junit / platform sebelumnya.
Setelah menggaruk-garuk kepala selama beberapa waktu, saya menyadari bahwa proyek-proyek di mana tes tidak akan berjalan adalah proyek yang nama metode tesnya tidak mengandung kata "test". Meskipun ini tidak diamanatkan oleh http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html
Dengan kata lain: hanya dengan
ini
TIDAK akan dijalankan, sedangkan
AKAN dijalankan!
Masalah ini terungkap sebagai boneka Rusia ...
Bagaimanapun, +1 untuk @Mikhail Kholodkov yang jawaban mutakhirnya memperbaiki semua masalah sekaligus!
sumber
Saya mengalami masalah yang sama pada Agustus 2019 yang saya tanyakan di sini: Maven diam-diam gagal menemukan pengujian JUnit untuk dijalankan . Jawaban-jawaban ini menuntun saya ke arah yang benar, tetapi saya menemukan bahwa Anda dapat menyelesaikan masalah dengan lebih ringkas. Saya menyalin solusi saya dari proyek sampel Maven JUnit5 .
Mulai JUnit 5.5.1 dan
maven-surefire-plugin
2.22.2, Anda tidak perlu menambahkanjunit-platform-surefire-provider
dependensi. Cukup memiliki satu ketergantungan ini dan satu plugin yang ditentukan di Andapom.xml
:sumber
Hanya untuk melengkapi, pasti 2.22.0 + junit 5.2.0 + platform 1.2.0 juga berfungsi. Terlampir adalah pom yang berfungsi untuk referensi Anda:
sumber
junit-vintage-engine
ketergantungan, dan semua tes saya ditulis untuk JUnit 4.Dalam kasus saya, ini karena TestNG di classpath ( SUREFIRE-1527 ). Groovy 2.5.5 POM telah membawanya dengan
groovy-testng
modul.Penyedia kerangka kerja pengujian yang ditentukan secara manual (seperti yang dijelaskan di https://maven.apache.org/surefire/maven-surefire-plugin/examples/providers.html ) memecahkan masalah:
sumber
<dependency>
dalam<dependencies>
contoh kode Anda.Ada masalah terbuka pasti 2.20
Ini berfungsi untuk saya dengan surfire 2.19 + junit-platform- * 1.0.3
sumber
Saya memiliki masalah serupa juga menyebabkan Surefire mengenali tes nol.
Masalah saya ternyata terkait dengan berikut ini (dari dokumentasi JUnit 5.1.0 / maven ):
Saya mencoba menggunakan versi terbaru Surefire (2.21.0) dan junit-platform-surefire-provider (1.1.0), dan tidak berhasil (baik di Java 8 atau 9)
Beralih kembali ke Surefire 2.19.1 memecahkan masalah saya.
Menurut masalah ini, perbaikan akan disertakan dalam versi 1.2.0 dari penyedia junit-platform-surefire (saat ini hanya tersedia sebagai SNAPSHOT).
sumber
Satu hal yang saya perhatikan bahwa saya bisa membuatnya berfungsi:
ClinicCalendarShould
tidak diambil oleh mavenClinicCalendarTest
APAKAH diambil oleh mavenJadi, kecuali saya kehilangan beberapa jenis konfigurasi atau parameter atau apa pun di plugin yang pasti, secara default, Anda perlu memberi nama kelas pengujian Anda XXXTest.
sumber
Memperbarui untuk
maven-surefire-plugin:2.20
menjalankan pengujian Junit5 tanpa masalah.Tapi saya menggunakan
M6
versi di Junit5.sumber
Dalam kasus saya, plugin yang pasti tidak mendapatkan versi yang benar auf jupiter-engine / api. Dan itu bahkan jika menjalankan Maven 3.6.1 dan versi surefireplugin 2.22.2!
Sekarang konfigurasi plugin pasti saya terlihat seperti:
Lebih jauh lagi, saya harus memaksa Versi ini:
Sepertinya 5.5.2 ditautkan ke platform versi 1.3.2 yang salah, bukan 1.5.2 dalam kasus saya.
Semua Tes JUnit5 diambil sekarang. Bahkan dengan 2.22.0 plugin yang pasti, ini bukan masalahnya bagi saya!
Semoga membantu ...
sumber
Saya menghadapi masalah yang sama
junit5
danmaven-surefire
tes gagal. Namunjunit4
berjalan dengan baik. Kombinasi di bawah ini berfungsi untuk saya, saya tidak menambahkan versi. Gunakanjunit-bom
untuk manajemen ketergantungan. Menggunakanspring-boot
2.1.4
Pastikan untuk meningkatkan ke versi gerhana terbaru
sumber