Bina Jar dengan Maven dan Abaikan Keputusan Ujian

1. Pengenalan

Panduan ringkas ini menunjukkan cara membina balang dengan Maven sambil mengabaikan keputusan ujian.

Secara lalai, Maven menjalankan ujian unit secara automatik semasa membina projek. Walau bagaimanapun, terdapat kes-kes yang jarang berlaku apabila ujian dapat dilangkau dan kita perlu membina projek tanpa mengira hasil ujian.

2. Membina Projek

Mari buat projek mudah di mana kami juga memasukkan kes ujian kecil:

public class TestFail { @Test public void whenMessageAssigned_thenItIsNotNull() { String message = "hello there"; assertNotNull(message); } }

Mari kita bina fail jar dengan melaksanakan perintah Maven berikut:

mvn package

Ini akan menghasilkan penyusunan sumber dan menghasilkan fail maven-0.0.1-SNAPSHOT.jar di bawah direktori / target.

Sekarang, mari ubah sedikit ujian, jadi ujian mula gagal.

@Test public void whenMessageAssigned_thenItIsNotNull() { String message = null; assertNotNull(message); }

Kali ini, ketika kita cuba menjalankan perintah pakej mvn sekali lagi, binaannya gagal dan fail maven-0.0.1-SNAPSHOT.jar tidak dibuat.

Ini bermaksud, jika kita mengalami ujian yang gagal dalam aplikasi kita, kita tidak dapat memberikan file yang dapat dieksekusi kecuali kita memperbaiki ujian tersebut.

Oleh itu, bagaimana kita dapat menyelesaikan masalah ini?

3. Hujah Maven

Maven mempunyai hujah tersendiri untuk menangani masalah ini:

  • -Dmaven.test.failure.ignore = true mengabaikan sebarang kegagalan yang berlaku semasa pelaksanaan ujian
  • -Dmaven.test.skip = true tidak akan menyusun ujian
  • -fn , -fae tidak pernah gagal membina tanpa mengira keputusan ujian

Mari kita menjalankan MVN pakej -Dmaven.test.skip = true perintah dan melihat hasilnya:

[INFO] Tests are skipped. [INFO] BUILD SUCCESS

Ini bermaksud projek akan dibina tanpa menyusun ujian.

Sekarang mari kita menjalankan MVN pakej -Dmaven.test.failure.ignore = benar arahan:

[INFO] Running testfail.TestFail [ERROR] whenMessageAssigned_thenItIsNotNull java.lang.AssertionError [INFO] BUILD SUCCESS

Ujian unit kami gagal dalam penegasan tetapi binaannya berjaya.

Akhirnya, mari kita uji pilihan -fn , -fae . Kedua-duanya, perintah paket -fn dan package -fae membina fail jar dan menghasilkan output BUILD SUCCESS tanpa mengira bila ujianMessageAssigned_thenItIsNotNull () gagal.

Sekiranya projek multi-modul -fn pilihan harus digunakan. -fae meneruskan modul yang mempunyai ujian gagal tetapi melangkau semua modul yang bergantung.

4. Plugin Maven Surefire

Kaedah lain yang mudah untuk mencapai matlamat kami adalah dengan menggunakan plugin Maven's Surefire.

Untuk gambaran keseluruhan lanjut mengenai pemalam Surefire, rujuk artikel ini.

Untuk mengabaikan ujian gagal, kita hanya boleh menetapkan sifat testFailureIgnore menjadi benar :

 maven-surefire-plugin ${maven.surefire.version}   TestFail.java  true  

Sekarang, mari kita lihat output arahan pakej :

[INFO] T E S T S [INFO] Running testfail.TestFail [ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, <<< FAILURE! - in testfail.TestFail

Dari output ujian yang dijalankan, kita dapat melihat kelas TestFail gagal. Tetapi melihat lebih jauh kita melihat bahawa mesej BUILD SUCCESS juga ada dan fail maven-0.0.1-SNAPSHOT.jar disusun.

Bergantung pada keperluan kita, kita boleh melangkau ujian sama sekali. Untuk itu kita boleh menggantikan baris testFailureIgnore dengan:

true

Atau tetapkan argumen baris perintah -DskipTests . Ini akan mengumpulkan kelas ujian tetapi melangkau pelaksanaan ujian sepenuhnya.

5. Kesimpulan

Dalam artikel ini, kami belajar membina projek kami dengan Maven tanpa mengira hasil ujiannya . Kami melalui contoh praktikal untuk melangkau ujian yang gagal atau tidak termasuk penyusunan ujian sepenuhnya.

Seperti biasa, kod lengkap untuk artikel ini terdapat di projek GitHub.