Apa itu unit testing
Unit testing adalah pengujian otomatis pada bagian terkecil dari kode program, biasanya satu fungsi atau satu method, untuk memastikan bagian tersebut berjalan sesuai yang diharapkan. Pengujian ini dijalankan berulang kali setiap ada perubahan kode, sehingga kesalahan dapat terdeteksi lebih awal sebelum sampai ke pengguna.
Kenapa unit testing penting
- Mendeteksi bug lebih awal, sebelum kode digabung atau dirilis ke produksi.
- Memberi kepercayaan diri saat melakukan refactor, karena ada jaring pengaman otomatis.
- Berfungsi sebagai dokumentasi hidup tentang bagaimana suatu fungsi seharusnya berperilaku.
- Mempercepat proses code review karena reviewer bisa melihat skenario yang sudah diuji.
Contoh sederhana di Python (pytest)
Berikut contoh fungsi sederhana untuk menghitung diskon, beserta unit test-nya menggunakan pytest:
def hitung_harga_setelah_diskon(harga, persen_diskon):
if persen_diskon < 0 or persen_diskon > 100:
raise ValueError("Persen diskon tidak valid")
return harga - (harga * persen_diskon / 100)
def test_diskon_normal():
assert hitung_harga_setelah_diskon(100000, 10) == 90000
def test_diskon_nol():
assert hitung_harga_setelah_diskon(50000, 0) == 50000
def test_diskon_tidak_valid():
with pytest.raises(ValueError):
hitung_harga_setelah_diskon(100000, 150)
Contoh sederhana di JavaScript (Jest)
function hitungTotal(items) {
return items.reduce((total, item) => total + item.harga * item.qty, 0);
}
test('menghitung total belanja dengan benar', () => {
const items = [{ harga: 10000, qty: 2 }, { harga: 5000, qty: 3 }];
expect(hitungTotal(items)).toBe(35000);
});
test('mengembalikan 0 untuk keranjang kosong', () => {
expect(hitungTotal([])).toBe(0);
});
Prinsip menulis unit test yang baik
- Satu test, satu skenario: hindari menggabungkan banyak pengecekan berbeda dalam satu fungsi test.
- Independen: urutan menjalankan test tidak boleh mempengaruhi hasil test lainnya.
- Cepat dijalankan: hindari memanggil database atau API eksternal asli di dalam unit test, gunakan mock atau stub.
- Uji juga kasus gagal: jangan hanya menguji jalur sukses, tapi juga input tidak valid dan kondisi batas (edge case).
Kapan sebaiknya mulai menulis unit test
Idealnya sejak awal pengembangan fitur, bukan setelah aplikasi selesai dibangun. Namun untuk proyek yang sudah berjalan tanpa test sama sekali, mulai dari fungsi-fungsi kritikal yang paling sering menyebabkan bug tetap lebih baik daripada menunggu kondisi ideal.