MATERI 21 DARI 28
Unit, integration, API, dan end-to-end test
Pilih lapisan test sesuai risiko dan boundary yang ingin dibuktikan.
Tujuan pembelajaran
- Membedakan jenis test.
- Menghindari terlalu banyak mock.
- Menguji kontrak HTTP nyata.
Konsep utama
Unit
Cepat untuk logika murni.
Integration
Menguji database, file, atau service boundary.
E2E
Menguji alur pengguna kritis dengan biaya lebih tinggi.
Alur kerja teknis
- Tulis tujuan dan acceptance criteria.
- Buat perubahan kecil yang dapat ditinjau.
- Jalankan test dan baca diff sebelum menerima hasil AI.
Contoh implementasi
Unit test tanpa dependency eksternal
def total(items):
if any(x < 0 for x in items):
raise ValueError("Nilai negatif")
return sum(items)
def test_total():
assert total([10, 20]) == 30API test dengan assertion
const response = await fetch("http://localhost:3000/health");
if (response.status !== 200) throw new Error("health check gagal");
const body = await response.json();
console.assert(body.status === "ok");Aspek keamanan
- Fixture harus unik dan dibersihkan dalam finally.
- Jangan menguji production dengan destructive payload.
- Pastikan test benar-benar dapat gagal pada bug yang ditargetkan.
Kesalahan umum
- Menerima kode AI tanpa membaca diff dan memahami alur data.
- Menguji hanya happy path dan mengabaikan input salah atau batas nilai.
- Menyimpan secret, token, atau data nyata di prompt dan source code.
Pengujian dan verifikasi
- Jalankan contoh dengan input normal.
- Ulangi dengan input kosong, tipe salah, dan nilai batas.
- Pastikan error tidak membocorkan secret atau detail internal.
Latihan
- Modifikasi contoh dengan satu kebutuhan baru dan tulis acceptance criteria-nya.
- Tambahkan satu negative test lalu jelaskan risiko yang dicegah.
Checklist
- Tujuan dan batas pekerjaan jelas.
- Input divalidasi di server.
- Secret tidak berada di source/prompt.
- Test lulus dan diff sudah dibaca.
Rangkuman
Pilih lapisan test sesuai risiko dan boundary yang ingin dibuktikan.