Cara Generate Unit Test dengan AI (dan Kapan Jangan Percaya Hasilnya)

Developer menulis unit test di laptop

Written by

in

Ini skenario yang pernah kamu alami (atau akan kamu alami): deadline besok, fitur baru sudah jalan, tapi test coverage-nya masih merah. Kamu buka AI assistant, paste kodenya, bilang “tolong buatkan unit test,” dan dalam 30 detik… ratusan baris test muncul. Coverage langsung hijau.

Masalah selesai? Belum tentu.

Di artikel ini kita bahas cara generate unit test dengan AI secara benar — termasuk kapan hasilnya bisa dipercaya, dan kapan kamu harus waspada.


Kenapa AI Bagus untuk Generate Test?

Sebelum ke bagian kritisnya, acknowledge dulu: AI memang genuinely helpful untuk testing. Berikut alasannya:

1. Eliminasi Kebosanan Menulis Boilerplate

Unit test itu repetitif. Setup mock, membuat assertion, cleanup — polanya sama terus. AI sangat baik untuk pekerjaan yang punya pola jelas. Kamu bisa describe apa yang mau ditest, AI yang urus boilerplate-nya.

2. Coverage Kasus yang Terlewat

Sering kali kita menulis test untuk happy path tapi lupa edge cases. AI bisa suggest: “Bagaimana kalau input-nya null? Kalau string kosong? Kalau number negatif?” — hal-hal yang kadang luput dari perhatian kita.

3. Kecepatan Iterasi

Untuk fungsi yang straightforward, AI bisa generate test dalam detik. Kamu bisa fokus pikiran ke logic yang lebih complex.


Cara Generate Unit Test dengan AI: Step by Step

Langkah 1: Siapkan Konteks yang Cukup

Jangan cuma paste fungsinya saja. Berikan AI konteks lengkap:

Ini adalah fungsi calculateShippingCost di file shipping.service.ts.

Fungsi ini menerima weight (gram), destination (string kode kota),

dan isMember (boolean).

Aturan bisnis:

  • Berat < 500g: flat Rp 15.000
  • Berat 500g–2kg: Rp 20.000 + Rp 5.000 per 500g
  • Berat > 2kg: Rp 35.000 + Rp 4.000 per 500g
  • Member dapat diskon 10%
  • Pengiriman ke luar Jawa: tambah Rp 10.000

Tolong buatkan unit test yang komprehensif dengan Jest.

Semakin jelas konteks bisnis yang kamu berikan, semakin relevan test yang dihasilkan.

Langkah 2: Minta Test untuk Kategori Spesifik

Daripada minta “unit test” generik, minta kategori:

  • Happy path — input normal, output expected
  • Edge cases — batas-batas nilai (0, nilai maximum, nilai tepat di threshold)
  • Error cases — input invalid, null, undefined
  • Business rule tests — setiap aturan bisnis harus ada test-nya sendiri

Langkah 3: Review Setiap Test Satu per Satu

Ini bagian yang sering di-skip, dan ini bagian terpenting.


Tanda-tanda Test AI yang Tidak Bisa Dipercaya

1. Test yang Selalu Pass Apapun yang Terjadi

// Test yang tidak berguna

it('should calculate shipping', () => {

const result = calculateShippingCost(1000, 'JKT', false);

expect(result).toBeDefined(); // ini tidak test apapun yang bermakna

});

AI kadang generate test yang terlalu broad — hanya check bahwa fungsi tidak throw error, bukan check bahwa hasilnya benar.

2. Test yang Assertion-nya Salah

AI tidak selalu paham business logic kamu dengan sempurna. Contoh:

// Kalau AI salah hitung thresholdnya

it('should apply member discount', () => {

const result = calculateShippingCost(1000, 'JKT', true);

expect(result).toBe(18000); // AI mungkin hitung salah

});

Kamu harus verifikasi setiap expected value secara manual. Hitung sendiri dulu, baru compare dengan assertion AI.

3. Mock yang Terlalu Agresif

// Mock yang terlalu banyak = test yang tidak realistis

jest.mock('./database');

jest.mock('./logger');

jest.mock('./config');

jest.mock('./validator');

// ...sampai test tidak lagi mencerminkan behavior nyata

Kalau semua dependency di-mock, kamu mungkin test unit yang sangat isolated tapi tidak punya nilai untuk mendeteksi bug di integrasi komponen.

4. Duplicate Test dengan Nama Berbeda

AI kadang generate test yang pada dasarnya sama tapi dengan nama yang berbeda. Ini inflates coverage tanpa menambah nilai.


Strategi yang Benar: AI sebagai Asisten, Kamu sebagai Reviewer

Workflow yang Disarankan:

1. Tulis test kritis secara manual dulu

Logic bisnis paling penting? Tulis test-nya sendiri. Ini pastikan kamu paham apa yang di-test dan assertion-nya benar.

2. Gunakan AI untuk melengkapi edge cases

Setelah test utama ada, tanya AI: “Kasus apa lagi yang perlu saya test?” Biarkan AI suggest, kamu yang decide mana yang relevan.

3. Review setiap assertion secara manual

Untuk setiap test yang dihasilkan AI, tanyakan:

  • Apakah expected value ini benar? (hitung manual)
  • Apakah test ini bisa fail jika ada bug nyata?
  • Apakah test ini mencerminkan use case yang realistis?

4. Jalankan mutation testing

Tools seperti Stryker (JavaScript) atau PITest (Java) akan sengaja “mutasi” kode kamu dan check apakah test-mu gagal. Ini cara terbaik untuk verify apakah test AI kamu bermakna atau kosong.


Prompt Template yang Efektif

Berikut template prompt yang terbukti menghasilkan test berkualitas lebih baik:

Saya punya fungsi berikut:

[paste kode]

Konteks bisnis:

[jelaskan aturan bisnis, constraint, edge cases yang kamu tahu]

Teknologi yang digunakan: [Jest/PyTest/JUnit/dll]

Tolong buatkan unit test dengan kriteria:

  1. Setiap aturan bisnis harus ada minimal 1 test
  2. Test edge cases: nilai 0, null, undefined, nilai di batas threshold
  3. Test error handling untuk input invalid
  4. Berikan komentar singkat untuk setiap test yang menjelaskan KENAPA test itu penting
  5. Jangan gunakan mock kecuali untuk external dependencies (database, API)

Tambahan komentar “kenapa test itu penting” itu trik kecil tapi powerful — AI akan lebih focused menghasilkan test yang meaningful.


Kapan JANGAN Bergantung pada AI untuk Test?

  • Payment dan financial logic — hitung manual, test manual, cek ulang manual
  • Security-related code — autentikasi, otorisasi, enkripsi
  • Data migration — kalau salah, data corrupt
  • Kode yang kamu sendiri belum sepenuhnya paham — jangan minta AI test sesuatu yang kamu tidak mengerti

Untuk kasus-kasus ini: tulis test kamu sendiri, peer review dengan developer lain, dan treat test sebagai dokumentasi hidup dari behavior yang harusnya terjadi.


Kesimpulan

AI adalah alat luar biasa untuk generate unit test — asalkan kamu tidak menelan hasilnya mentah-mentah. Coverage yang tinggi tidak sama dengan test yang bermakna. Test yang bermakna adalah test yang akan fail ketika ada bug nyata, bukan test yang selalu hijau mau kode-nya benar atau salah.

Gunakan AI untuk kecepatan dan saran edge cases, tapi tetap kamu yang memegang kendali atas kualitas dan kebenaran setiap assertion.


Butuh review test suite kamu atau mau diskusi strategi testing yang tepat untuk project spesifik? Yuk ngobrol — hubungi mafadev dan kita cari solusi bareng.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *