Saya memiliki proyek multi-modul maven2 dan di masing-masing modul anak saya, saya memiliki tes JUnit yang diberi nama Test.java
dan Integration.java
untuk tes unit dan tes integrasi masing-masing. Ketika saya mengeksekusi:
mvn test
semua tes JUnit *Test.java
dalam modul anak dijalankan. Ketika saya mengeksekusi
mvn test -Dtest=**/*Integration
tidak ada Integration.java
tes yang dieksekusi dalam modul anak.
Ini tampak seperti perintah yang sama persis bagi saya tetapi yang dengan -Dtest = / * Integrasi ** tidak berfungsi menampilkan 0 tes yang dijalankan pada tingkat induk, yang tidak ada tes
Jawaban:
Anda dapat mengatur Maven's Surefire untuk menjalankan tes unit dan tes integrasi secara terpisah. Pada fase uji unit standar, Anda menjalankan segala sesuatu yang tidak sesuai dengan pola uji integrasi. Anda kemudian membuat fase pengujian kedua yang hanya menjalankan tes integrasi.
Berikut ini sebuah contoh:
sumber
The Maven membangun siklus hidup sekarang termasuk "integrasi-test" fase untuk menjalankan tes integrasi, yang dijalankan secara terpisah dari unit test dijalankan selama fase "test". Ini berjalan setelah "paket", jadi jika Anda menjalankan "mvn memverifikasi", "mvn instal", atau "mvn deploy", tes integrasi akan dijalankan di sepanjang jalan.
Secara default, integrasi-tes berjalan tes kelas bernama
**/IT*.java
,**/*IT.java
, dan**/*ITCase.java
, tetapi ini dapat dikonfigurasi.Untuk perincian tentang cara menghubungkan semua ini, lihat plugin Failsafe , halaman penggunaan Failsafe (tidak ditautkan dengan benar dari halaman sebelumnya saat saya menulis ini), dan lihat juga posting blog Sonatype ini .
sumber
mvn integration-test
juga menjalankan tes unit (menggunakan via ayal) tetapimvn failsafe:integration-test
hanya menjalankan tes integrasi yang aman.package
fase, itu berarti saya harus meletakkan semua kode sumber TI IT saya di bawahsrc/main/java
bukansrc/test/java
?Saya telah melakukan PERSIS apa yang ingin Anda lakukan dan itu bekerja dengan baik. Tes unit "* Tes" selalu berjalan, dan "* IntegrationTests" hanya berjalan ketika Anda melakukan mvn memverifikasi atau menginstal mvn. Ini potongan dari POM saya. serg10 hampir benar .... tapi tidak cukup.
Semoga berhasil!
sumber
clean compile integration-test -Dmaven.test.failure.ignore=false
Anda dapat membaginya dengan sangat mudah menggunakan kategori JUnit dan Maven.
Ini ditunjukkan sangat, sangat singkat di bawah ini dengan pemisahan unit dan tes integrasi.
Tentukan Antarmuka Penanda
Langkah pertama dalam mengelompokkan tes menggunakan kategori adalah membuat antarmuka penanda.Antarmuka ini akan digunakan untuk menandai semua tes yang ingin Anda jalankan sebagai tes integrasi.
Tandai kelas tes Anda
Tambahkan anotasi kategori ke bagian atas kelas tes Anda. Dibutuhkan nama antarmuka baru Anda.
Konfigurasikan Tes Unit Maven
Keindahan dari solusi ini adalah tidak ada yang benar-benar berubah untuk sisi pengujian unit.Kami cukup menambahkan beberapa konfigurasi ke plugin maven surefire untuk membuatnya mengabaikan semua tes integrasi.
Saat Anda melakukan
mvn clean test
, hanya pengujian unit yang tidak ditandai yang akan berjalan.Konfigurasikan Tes Integrasi Maven
Sekali lagi konfigurasi untuk ini sangat sederhana.Kami menggunakan plugin failafe standar dan mengonfigurasinya untuk hanya menjalankan tes integrasi.
Konfigurasi menggunakan tujuan eksekusi standar untuk menjalankan plugin failafe selama fase uji integrasi build.
Anda sekarang dapat melakukan
mvn clean install
.Kali ini serta tes unit berjalan, tes integrasi dijalankan selama fase uji integrasi.
sumber
Anda harus mencoba menggunakan plugin maven failafe . Anda dapat memerintahkannya untuk menyertakan serangkaian tes tertentu.
sumber
maven-failsafe-plugin
telah pergi ke Plugin Graveyardfailsafe
plugin telah dipindahkan kemaven-failsafe-plugin
. Sepertinyamaven-failsafe-plugin
masih aktif (dokumen terakhir didorong Maret 2014).Secara default, Maven hanya menjalankan tes yang memiliki Tes di suatu tempat di nama kelas.
Ganti nama menjadi IntegrationTest dan itu mungkin akan berfungsi.
Atau Anda dapat mengubah konfigurasi Maven untuk menyertakan file itu, tetapi mungkin lebih mudah dan lebih baik hanya untuk memberi nama tes Anda SomethingTest.
Dari Inklusi dan Pengecualian Tes :
sumber
Cara lain untuk menjalankan tes integrasi dengan Maven adalah dengan memanfaatkan fitur profil:
Menjalankan 'mvn clean install' akan menjalankan build default. Seperti ditentukan tes integrasi di atas akan diabaikan. Menjalankan 'mvn clean install -P-integrasi-tes' akan mencakup tes integrasi (Saya juga mengabaikan tes integrasi pementasan saya). Selain itu, saya memiliki server CI yang menjalankan tes integrasi saya setiap malam dan untuk itu saya mengeluarkan perintah 'mvn test -P Integration-tests' .
sumber
Anda dapat mengikuti dokumentasi pakar untuk menjalankan tes unit dengan build dan menjalankan tes integrasi secara terpisah.
Ini akan memungkinkan Anda untuk menjalankan dengan semua tes integrasi dinonaktifkan secara default. Untuk menjalankannya, Anda menggunakan perintah ini:
sumber
Anda harus menggunakan plugin maven surefire untuk menjalankan tes unit dan plugin maven failafe untuk menjalankan tes integrasi.
Silakan ikuti di bawah ini jika Anda ingin beralih pelaksanaan tes ini menggunakan bendera.
Konfigurasi Maven
Jadi, tes akan dilewati atau dialihkan sesuai dengan aturan bendera di bawah ini:
Tes dapat dilewati dengan tanda di bawah ini:
-DskipTests
melompati tes unit dan integrasi-DskipUnitTests
melewatkan tes unit tetapi menjalankan tes integrasi-DskipIntegrationTests
melompati tes integrasi tetapi menjalankan tes unitMenjalankan Tes
Jalankan di bawah ini untuk hanya menjalankan Tes Unit
Anda dapat menjalankan perintah di bawah ini untuk menjalankan tes (baik unit maupun integrasi)
Untuk menjalankan hanya Tes Integrasi, ikuti
Atau lewati pengujian unit
Juga, untuk melewati tes integrasi selama
mvn install
, ikutiAnda dapat melewati semua tes menggunakan
sumber