Bangun Jar dengan Maven dan Abaikan Hasil Tes

1. Perkenalan

Panduan singkat ini menunjukkan cara membuat stoples dengan Maven sambil mengabaikan hasil pengujian.

Secara default, Maven menjalankan pengujian unit secara otomatis saat membangun proyek. Namun, ada kasus yang jarang terjadi ketika pengujian dapat dilewati dan kami perlu membangun proyek terlepas dari hasil pengujiannya.

2. Membangun Proyek

Mari buat proyek sederhana di mana kami juga menyertakan kasus uji kecil:

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

Mari buat file jar dengan menjalankan perintah Maven berikut:

mvn package

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

Sekarang, mari kita ubah sedikit pengujian, sehingga pengujian mulai gagal.

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

Kali ini, ketika kami mencoba menjalankan perintah paket mvn lagi, build gagal dan file maven-0.0.1-SNAPSHOT.jar tidak dibuat.

Artinya, jika kami memiliki pengujian yang gagal dalam aplikasi kami, kami tidak dapat menyediakan file yang dapat dijalankan kecuali kami memperbaiki pengujian tersebut.

Jadi bagaimana kita bisa mengatasi masalah ini?

3. Argumen Maven

Maven memiliki argumennya sendiri untuk menangani masalah ini:

  • -Dmaven.test.failure.ignore = true mengabaikan segala kegagalan yang terjadi selama eksekusi uji
  • -Dmaven.test.skip = true tidak akan mengkompilasi pengujian
  • -fn , -fae tidak pernah gagal dalam build apa pun hasil pengujiannya

Ayo jalankan perintah mvn package -Dmaven.test.skip = true dan lihat hasilnya:

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

Artinya, proyek akan dibangun tanpa menyusun pengujian.

Sekarang mari kita jalankan perintah mvn package -Dmaven.test.failure.ignore = true :

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

Pengujian unit kami gagal pada pernyataan tetapi build berhasil.

Terakhir, mari kita uji opsi -fn , -fae . Keduanya, perintah package -fn dan package -fae membuat file jar dan menghasilkan keluaran BUILD SUCCESS terlepas dari kapan pengujianMessageAssigned_thenItIsNotNull () gagal.

Dalam kasus proyek multi-modul opsi -fn harus digunakan. -fae berlanjut dengan modul yang tesnya gagal tetapi melewatkan semua modul dependen.

4. Plugin Maven Surefire

Cara mudah lain untuk mencapai tujuan kami adalah dengan menggunakan plugin Surefire Maven.

Untuk gambaran umum tambahan tentang plugin Surefire, lihat artikel ini.

Untuk mengabaikan pengujian yang gagal, kita cukup menyetel properti testFailureIgnore ke true :

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

Sekarang, mari kita lihat output dari perintah package :

[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 keluaran pengujian yang berjalan, kita dapat melihat kelas TestFail gagal. Tetapi melihat lebih jauh kita melihat bahwa pesan BUILD SUCCESS juga ada dan file maven-0.0.1-SNAPSHOT.jar telah dikompilasi.

Tergantung pada kebutuhan kita, kita dapat melewatkan menjalankan tes sama sekali. Untuk itu kita bisa mengganti baris testFailureIgnore dengan:

true

Atau setel argumen baris perintah -DskipTests . Ini akan mengompilasi kelas pengujian tetapi melewatkan seluruh eksekusi pengujian.

5. Kesimpulan

Dalam artikel ini, kami mempelajari cara membangun proyek kami dengan Maven terlepas dari hasil pengujiannya . Kami mempelajari contoh praktis melewatkan pengujian yang gagal atau mengecualikan kompilasi pengujian sepenuhnya.

Seperti biasa, kode lengkap untuk artikel ini tersedia di proyek GitHub.