Unittesting Pada Java Dengan JUnit 5

Pada process development memiliki 1 bagian yang penting taitu unittest pada pemrograman Java kita bisa menggunakan Junit , JUnit adalah kerangka kerja pengujian unit (unit testing framework) untuk bahasa pemrograman Java. JUnit digunakan untuk menulis dan menjalankan tes yang dapat memeriksa apakah kode sumber bekerja seperti yang diharapkan. Prinsip dasar JUnit adalah mengatur kode sumber ke dalam “unit” terkecil, seperti metode atau kelas, dan kemudian menulis tes terpisah untuk setiap unit tersebut. Ini memungkinkan pengembang untuk menguji bagian tertentu dari aplikasi secara terpisah, untuk memastikan bahwa setiap bagian bekerja sebagaimana mestinya sebelum mengintegrasikannya ke dalam kode yang lebih besar.

Fitur utama JUnit meliputi:

Anotasi untuk Menandai Metode Tes: Misalnya, @Test digunakan untuk menandai metode yang akan diuji.
Pengujian Asersi: Fungsi asersi, seperti assertEquals(), digunakan untuk memeriksa apakah hasil aktual sesuai dengan yang diharapkan.
Pengaturan dan Pembongkaran Tes: Anotasi seperti @Before dan @After digunakan untuk menyiapkan kondisi sebelum setiap tes dan membersihkannya setelah tes selesai.
Pengelompokan Tes: Tes dapat dikelompokkan ke dalam kelas untuk pengujian yang lebih terstruktur.
Pengujian Penanganan Eksepsi: Memeriksa apakah kode menghasilkan eksepsi yang diharapkan di situasi tertentu.
Dalam unittest kita dapat mengimplementasikan test secara perogramaticaly yang goalsnya adalh menjaga konsistensi kode yang sudah kita buat setelah kita ubah , atau terjadi perubahan requirements

Contoh Test :

Pada class KalkulatorService kita dapat memiliki code seperti dibawah ini dengan goals kita akan menghitung volume tabung , complexitas di bawah bertujuan untuk memberikan informasi coverage



    public Double perkalian(Double a, Double b) {
        return a * b;
    }

    public Double volumeTabung(Double r, Double t) {
        Double luasLingkaran = 0D;
        if (r == 1) {
            luasLingkaran = 3.14;
        } else if (r == 2) {
            luasLingkaran = 3.14 * 2;
        } else if (r == 3) {
            luasLingkaran = 3.14 * 3;
        } else if (r == 4) {
            luasLingkaran = 3.14 * 4;
        } else {
            Double rKaudrat = this.perkalian(r, r);
            luasLingkaran = this.perkalian(rKaudrat, 3.14);
        }
        return this.perkalian(luasLingkaran, t);
    }

    public Double totalVolumeSekianTabung(Double r, Double t, int jumlahTabung) {
        Double volumeTabung = this.volumeTabung(r, t);
        if (jumlahTabung == 1) {
            return volumeTabung;
        }
        return this.perkalian(volumeTabung, (double) jumlahTabung);
    }

pada kode tersebut memiliki 2 fungsi yatu volumeTabung ,totalVolumeSekianTabung dan perkalian fungsi fungsi tersebut saling berhubungan 1 sama lain dengan dependency

untuk melakukan testing pada volumeTabung kita dapat membuat class KalkulatorServiceTest dan membuat fungsi


    @Test
    void testVolumeTabung() {
        KalkulatorService kalkulatorService = new KalkulatorService();
        Double result = kalkulatorService.volumeTabung(1D , 2D );
        assertEquals(6.28 ,  result);

    }

Fungsi di atas bertujuan utnuk melakukan operasi perhitungan volume tabung dengan parameter r = 1 dan t = 2 yang seharusnya menghasilkan angka 6.28 dimana dapat di validasi dari fungsi assertEquals(6.28 , result); setelah kita membuat unittest tersebut code akan selalu menghasilkan hasil yang sama meskipun code yang lain tersenggol atau terubah misalnya , terjadi kesalahan pada kode perkalian sehingga hasil berubah menjadi 2.28 maka test akan gagal dan code harus kita perbaiki sehingga hasil selalu sama dengan kriteria yang kita punya

Kita juga dapat melakukan negative test jika memiliki validasi seperti r tidak boleh minus dengan menambahkan code pada volumeTabung


public Double volumeTabung(Double r, Double t) {
        if(r < 1) {
            return -99D;
        }

....
}

maka test hars di buat seperti ini


@Test
    void testVolumeTabungDenganRMinusharusReturnMinus99() {
        KalkulatorService kalkulatorService = new KalkulatorService();
        Double result = kalkulatorService.volumeTabung(-1D , 2D );
        assertEquals(-99 ,  result);

    }

Sekian , dengan membuat unittest kita dapat membuat code kita selalu stabil dan mudah untuk dimaintain