Istilah Testing

Balik ke index.

Jenis-jenis test

  • Unit test — nguji satu bagian kecil kode (biasanya satu fungsi/method) secara terisolasi, tanpa bergantung ke bagian lain (database, network). Paling cepat dijalankan, paling murah dirawat.
  • Integration test — nguji beberapa komponen yang jalan bareng (misal fungsi yang manggil database beneran), buat mastiin mereka nyambung dengan benar.
  • End-to-end (e2e) test — nguji seluruh alur aplikasi dari sudut pandang user (klik tombol di browser sampai data masuk database). Paling realistis tapi paling lambat & paling gampang “flaky” (kadang gagal kadang nggak padahal kodenya nggak berubah).
  • Regression test — test yang dijalankan ulang buat mastiin perubahan baru nggak ngerusak fitur yang udah ada sebelumnya.
  • Smoke test — test cepat & dangkal buat mastiin hal-hal paling basic jalan (misal aplikasi bisa nyala, halaman utama bisa dibuka) — biasanya dijalanin duluan sebelum test yang lebih detail.

Konsep & praktik

  • Test coverage — persentase kode yang “tersentuh” sama test. Angka tinggi nggak otomatis berarti test-nya bagus (bisa aja cuma nyentuh baris kode tapi nggak ngecek hasil yang bener) — sering jadi pertanyaan jebakan di interview.
  • Mocking / stubbing — bikin versi palsu dari dependency (misal API eksternal atau database) biar unit test bisa fokus nguji satu bagian tanpa bergantung ke sistem lain yang lambat/nggak stabil.
  • TDD (Test-Driven Development) — nulis test dulu sebelum nulis kode implementasinya (test gagal dulu → baru bikin kode biar lolos → refactor). Pola umumnya disebut red-green-refactor.
  • Flaky test — test yang hasilnya nggak konsisten (kadang pass kadang fail) padahal kode yang diuji nggak berubah — biasanya karena timing, random data, atau dependency eksternal yang nggak stabil.
  • Assertion — pernyataan di dalam test yang ngecek apakah hasil aktual sesuai sama hasil yang diharapkan (misal assertEqual(result, 5)).
  • Test double — istilah umum buat “pengganti” dependency asli dalam test: mencakup mock, stub, fake, dan spy — beda-beda dikit tapi tujuannya sama, isolasi dari dependency asli.
  • CI pipeline / test gate — test yang otomatis jalan tiap ada push/PR baru (lewat CI/CD), dan PR baru boleh digabung kalau semua test lolos.

Pertanyaan interview yang sering muncul

  • “Kapan kamu nulis unit test vs integration test?”
  • “Gimana cara kamu nge-mock dependency eksternal (misal API pihak ketiga) di test?”
  • “Coverage 100% itu cukup nggak buat mastiin kode bebas bug? Kenapa?” (Jawaban yang bagus: nggak cukup — coverage cuma ngukur baris kode yang dieksekusi, bukan apakah semua kasus/edge case udah dicek.)

Flashcards

Apa bedanya unit test dan integration test? :: Unit test menguji satu bagian kecil kode secara terisolasi; integration test menguji beberapa komponen yang bekerja sama (misal dengan database beneran) Apa itu flaky test? :: Test yang hasilnya tidak konsisten (kadang pass kadang fail) padahal kode yang diuji tidak berubah, biasanya karena timing atau dependency eksternal Apa itu TDD dan siklusnya? :: Test-Driven Development: nulis test dulu (gagal), baru bikin kode biar lolos, lalu refactor — disebut siklus red-green-refactor Kenapa test coverage 100% belum tentu berarti kode bebas bug? :: Coverage hanya mengukur baris kode yang dieksekusi test, bukan apakah semua kasus/edge case sudah dicek dengan assertion yang benar Apa itu mocking dan kenapa dipakai? :: Membuat versi palsu dari dependency (API/database) agar unit test bisa fokus menguji satu bagian tanpa bergantung ke sistem eksternal yang lambat/tidak stabil