Part 10: Unit Testing dengan JUnit

Mengapa Unit Testing Penting?
Bayangkan kamu sedang merakit furnitur tanpa petunjuk. Tanpa panduan, kamu tak tahu apakah sekrup sudah terpasang benar atau struktur sudah stabil. Unit testing adalah “panduan kualitas” untuk kode kamu – cara memverifikasi setiap komponen bekerja sebagaimana mestinya sebelum dirilis ke dunia nyata.

Dalam pengembangan perangkat lunak, unit testing membantu kamu:

  • 🛠️ Menangkap bug lebih awal – Masalah terdeteksi saat coding, bukan di production
  • 📄 Mendokumentasikan fitur – Test case menjelaskan cara kode seharusnya berperilaku
  • 🔄 Mempermudah refaktor – Dengan test yang baik, kamu bisa ubah kode tanpa takut merusak fungsionalitas

Apa Itu JUnit?
JUnit adalah framework open-source untuk menulis dan menjalankan test otomatis di Java. Dikembangkan pertama kali oleh Kent Beck dan Erich Gamma, JUnit 5 (versi terbaru) menjadi standar de facto untuk unit testing di ekosistem Java. Keunggulannya meliputi:

  • Sintaksis sederhana dengan annotations seperti @Test
  • Integrasi dengan IDE (IntelliJ, Eclipse) dan build tools (Maven, Gradle)
  • Laporan test yang mudah dibaca

Menyiapkan JUnit di Project Anda
Untuk mulai menggunakan JUnit 5, tambahkan dependency ini di pom.xml (Maven):

Atau di build.gradle (Gradle):

Jika tidak menggunakan build tool, download JAR dari situs resmi JUnit 5 dan tambahkan ke classpath.

Menulis Test Case Pertama
Mari buat test sederhana untuk kelas Kalkulator:

Buat file test di src/test/java dengan nama KalkulatorTest.java:

Penjelasan kode:

  1. @Test menandai method sebagai test case
  2. assertEquals membandingkan hasil aktual dengan yang diharapkan
  3. Pesan opsional (argumen ketiga) membantu debugging saat test gagal

Memahami Annotations Penting
JUnit 5 menggunakan sistem annotations untuk mengatur test: | Annotation | Deskripsi | |—————-|—————————————————————————| | @Test | Menandai method sebagai test case | | @BeforeEach | Dieksekusi sebelum setiap test method – ideal untuk inisialisasi objek | | @AfterEach | Bersihkan resource setelah setiap test | | @DisplayName | Memberi nama lebih deskriptif untuk test case di laporan |

Contoh penggunaan @BeforeEach:

Assertions: Inti dari Testing
Assertions adalah pernyataan boolean yang memverifikasi kondisi tertentu. JUnit 5 menyediakan berbagai tipe assertion:

  1. assertEquals(expected, actual)
    Memastikan dua nilai sama:

2. assertTrue(condition)
Memverifikasi kondisi benar:

3. assertThrows(Exception.class, executable)
Memastikan kode melempar exception:

Praktik Terbaik dalam Menulis Test
Agar test kamu efektif dan mudah dipelihara:

  1. Gunakan nama deskriptif
    testTambahDuaAngkaPositif() lebih baik dari test1()
  2. Test satu hal per method
    Jangan gabungkan test untuk fitur berbeda dalam satu method
  3. Jaga test tetap independen
    Test case tidak boleh bergantung pada urutan eksekusi
  4. Gunakan parameterized test untuk skenario berulang
    Contoh dengan @ParameterizedTest:

Langkah Selanjutnya
Setelah menguasai dasar-dasar JUnit, eksplorasi fitur lanjutan seperti:

  • Mocking dengan Mockito untuk mengisolasi dependensi eksternal
  • Integrasi dengan tools CI/CD seperti Jenkins atau GitHub Actions
  • Penggunaan assertion library seperti AssertJ untuk ekspresi lebih natural

Unit testing mungkin terasa membosankan di awal, tapi seperti helm pengaman untuk pengendara – kamu akan berterima kasih saat terjadi kecelakaan (bug) di jalan. Dengan JUnit, kamu membangun sistem yang lebih kuat, lebih mudah dipelihara, dan yang terpenting – layak dipercaya. Selamat menguji! 🚀