Unit test üretimi ve validasyon
Unit test generation and validation
Bu derste neler öğreneceksin
- Copilot ile unit test üretiminin farklı yollarını öğrenmek
- AI üretimi testlerin güvenilirliğini nasıl değerlendireceğini anlamak
- Test iskeleti (scaffolding) ile tamamlama arasındaki farkı kavramak
- Trivial test anti-pattern'ini tanımak ve önlemek
Copilot ile test üretimi yaklaşımları
Yaklaşım 1: /tests slash komutu
// Fonksiyonu seç, Chat'te yaz:
// /tests for this function
function add(a: number, b: number): number {
return a + b;
}
// Copilot üretir:
describe('add', () => {
it('should return sum of two positive numbers', () => {
expect(add(2, 3)).toBe(5);
});
it('should handle negative numbers', () => {
expect(add(-1, 1)).toBe(0);
});
// ...
});
Yaklaşım 2: Test dosyasını açık tut
Test dosyasını aç ve implementation’ı neighboring tab olarak bırak. Copilot mevcut test pattern’ini taklit ederek yeni testler önerir.
Yaklaşım 3: Chat ile kapsamlı test seti
"#file:src/services/PaymentService.ts
Write comprehensive Jest tests for PaymentService.processPayment().
Include: happy path, payment failure, network timeout, invalid input.
Mock Stripe API using jest.mock."
AI üretimi testleri değerlendirme
Copilot’un ürettiği testi körü körüne kabul etme. Kontrol et:
| Kontrol | İyi test | Kötü test |
|---|---|---|
| Assertion anlamlı mı? | expect(result).toBe(expected) | expect(fn).toBeDefined() |
| Edge case var mı? | null, undefined, boş liste | Sadece happy path |
| Mock doğru mu? | Gerçek davranışı simüle eder | Her zaman doğru döndürür |
| Test bağımsız mı? | Sıraya bağlı değil | Önceki testten durum alıyor |
Sınav için kritik ayrım: test scaffolding vs test tamamlama
| Durum | Ne kullan |
|---|---|
| Yeni servis için test iskeleti lazım | @workspace /tests + Chat ile kapsam tanımla |
| Mevcut test dosyasını genişlet | Neighboring tab aç, inline completion |
| Özel mock pattern gerekli | Chat + #file: ile mevcut mock örneği ver |
Copilot test üretiminin sınırlamaları
- Business logic bilmez: Copilot fonksiyon imzasına bakarak test üretir; iş kurallarını bilmez. “Bu değer %18 KDV içerir” gibi domain bilgisi yoktur.
- Regression test üretemez: Geçmiş bug’ları bilmez; sadece mevcut kodu görür.
- Integration test zordur: Servisler arası akış testi için güçlü context gerekir.
Sırada ne var?
Bir sonraki derste test coverage ve quality gates — coverage metrikleri, CI/CD entegrasyonu ve AI üretimi kod için kalite güvencesi.