BAB 03
Estimasi Waktu: 35-45 menit Prasyarat: 01-ai-assisted-coding.md
Materi ini membahas bagaimana menggunakan AI untuk membuat, meningkatkan, dan mengelola tests - unit test, integration test, dan end-to-end test. AI sangat efektif untuk testing karena bisa dengan cepat menghasilkan berbagai test cases, termasuk edge cases yang sering terlewat.
Setelah mempelajari materi ini, kamu akan mampu:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β KEUNGGULAN AI UNTUK TESTING β
β β
β 1. KOMPREHENSIF β
β β AI bisa generate banyak test cases sekaligus β
β β Termasuk edge cases yang sering terlewat β
β β
β 2. KONSISTEN β
β β Pola test yang konsisten β
β β Naming convention yang seragam β
β β
β 3. CEPAT β
β β Generate test dalam hitungan detik β
β β Jauh lebih cepat dari menulis manual β
β β
β 4. PERSPEKTIF BARU β
β β AI berpikir dari sudut "apa yang bisa salah?" β
β β Menemukan cases yang developer tidak pikirkan β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Buat unit test yang komprehensif untuk fungsi berikut:
```[bahasa]
// Fungsi yang akan ditest
function validateEmail(email: string): { valid: boolean; error?: string } {
// ... implementation
}
Framework test: [Jest / pytest / JUnit / dll] Coverage yang diharapkan: 100%
Harus mencakup:
Untuk setiap test:
### Template: Integration Test
Buat integration test untuk API endpoint berikut:
Endpoint: POST /api/users Framework: Express.js + Supertest
Test cases yang diperlukan:
Success scenarios:
Validation errors:
Auth errors:
Edge cases:
Setup: gunakan database test yang di-reset sebelum setiap test suite.
### Template: Test dari Requirement
Berdasarkan requirement berikut:
βUser bisa mengupload file gambar (JPG, PNG, max 5MB). File di-resize ke max 1024x1024. Thumbnail (200x200) juga dibuat. Metadata (filename, size, dimensions) disimpan ke database. Jika gagal, user mendapat pesan error yang jelas.β
Buat test suite yang komprehensif. Identifikasi dulu:
Lalu tulis test-nya menggunakan [framework].
---
## 3. Strategi Test Generation
### Strategi 1: TDD dengan AI
Alur kerja:
### Strategi 2: Test Existing Code
Alur kerja:
### Strategi 3: Improve Existing Tests
Prompt:
βIni kode dan test yang sudah ada:
Kode:
[kode]
Test:
[test yang ada]
Analisis:
---
## 4. Jenis-Jenis Test dan AI
### Unit Tests
AI sangat efektif. Setiap fungsi/method bisa ditest secara terpisah.
Prompt: βBuat unit test untuk [fungsi], cover semua edge casesβ Tips: Berikan signature dan expected behavior yang jelas
### Integration Tests
AI cukup efektif. Perlu konteks tentang komponen yang diintegrasikan.
Prompt: βBuat integration test untuk [endpoint/flow], mock [external dependencies]β Tips: Jelaskan dependencies dan cara mock-nya
### E2E Tests
AI bisa membantu menulis script tapi perlu info detail tentang UI flow.
Prompt: βBuat Playwright/Cypress test untuk flow: login β buka dashboard β buat item baru β verifikasi item adaβ Tips: Berikan selector atau data-testid jika ada
### Property-Based Tests
AI sangat bagus untuk mengidentifikasi properties yang harus selalu benar.
Prompt: βIdentifikasi properties yang bisa ditest untuk fungsi sort: - Hasil selalu sama panjang dengan input - Hasil selalu sorted - Setiap elemen input ada di output Lalu buat property-based tests-nya.β
---
## 5. Kualitas Test: Apa yang Perlu Di-review
### Checklist Review Test dari AI
CORRECTNESS β‘ Test benar-benar mengetes apa yang seharusnya? β‘ Assertion cukup spesifik? β‘ Tidak ada false positive (pass padahal seharusnya fail)?
COMPLETENESS β‘ Happy path tercover? β‘ Error path tercover? β‘ Edge cases tercover? β‘ Boundary values tercover?
MAINTAINABILITY β‘ Test tidak terlalu coupled dengan implementation? β‘ Setup/teardown yang proper? β‘ Mock yang reasonable (tidak over-mocking)?
READABILITY β‘ Nama test deskriptif? β‘ Arrange-Act-Assert pattern jelas? β‘ Tidak ada magic numbers tanpa penjelasan?
SPEED β‘ Tidak ada sleep/wait yang tidak perlu? β‘ Test berjalan cepat (< 1 detik per unit test)?
---
## 6. Anti-Pattern Testing dengan AI
### Anti-Pattern 1: Over-Testing Implementation Detail
BURUK: Test internal state yang seharusnya private βTest bahwa function menggunakan bubble sortβ
BAGUS: Test behavior yang observable βTest bahwa function menghasilkan array yang sortedβ
### Anti-Pattern 2: Test yang Tidak Assert Apa-apa
BURUK: test(βfunction worksβ, () => { const result = myFunction(input); // tidak ada assertion });
BAGUS: test(βshould return uppercase for valid inputβ, () => { const result = myFunction(βhelloβ); expect(result).toBe(βHELLOβ); });
### Anti-Pattern 3: Test Terlalu Fragile
BURUK: Test bergantung pada format string persis expect(result).toBe(βUser Budi created at 2024-01-15 10:30:00 WIBβ)
BAGUS: Test pada struktur/semantic expect(result.name).toBe(βBudiβ) expect(result.createdAt).toBeInstanceOf(Date)
---
## Latihan (~15 menit)
### Tugas
Pilih salah satu:
### Pilihan A: Generate Test untuk Kode Baru
Tulis fungsi sederhana (misal: password validator, date formatter), lalu minta AI generate test komprehensif. Review dan jalankan.
### Pilihan B: TDD dari Scratch
Tentukan requirement untuk fungsi kecil, minta AI buat test dulu, lalu implement.
### Pilihan C: Improve Test Coverage
Ambil kode yang sudah ada, minta AI identifikasi gap dalam test coverage dan tambahkan test yang diperlukan.
---
## Poin-Poin Utama
1. **AI sangat efektif** untuk generate test cases yang komprehensif
2. **Selalu review** test yang dihasilkan - pastikan benar-benar mengetes apa yang seharusnya
3. **TDD + AI** adalah kombinasi yang sangat powerful
4. **Edge cases** adalah keunggulan utama AI - dia bisa "berpikir" tentang kasus yang kita lewatkan
5. **Jangan over-mock** - test sebaiknya mengetes behavior, bukan implementation
6. **Test quality** tetap perlu review manusia
7. **Property-based testing** cocok untuk AI karena bisa mengidentifikasi invariants
---
## Informasi Materi
- **Lisensi:** CC BY-NC-SA 4.0