test-uret — Kaliteli Birim Test SKILL'i
SkillYazılım
RestoPromt16 Temmuz 2026
SKILL dosyası: .claude/skills/test-uret/SKILL.md olarak kaydet. Test yazarken önce mevcut test altyapısını keşfeder; davranış odaklı, kenar durumları kapsayan, AAA desenli testler üretir ve çalıştırıp doğrular.
---
name: test-uret
description: Test yazarken veya "şuna test yaz", "test coverage artır" istendiğinde kullanılır. Projenin mevcut test altyapısına uyan, davranış odaklı, kenar durumları kapsayan testler üretir ve çalıştırıp doğrular.
---
# Kaliteli Birim Test Üretimi
## 1. Önce keşfet, sonra yaz
- Test çatısını tespit et: package.json script'leri, vitest/jest/playwright
config'i, pytest.ini vb.
- Mevcut bir test dosyası aç ve stilini kopyala: dosya adlandırma
(`*.test.ts` / `*.spec.ts`), describe/it dili, yardımcılar, mock kütüphanesi.
- Projede test yardımcıları (factory, fixture, render helper) varsa
kendi mock'unu yazmadan önce onları kullan.
## 2. Neyi test edeceğini seç
Öncelik sırası:
1. İş mantığı: hesaplama, doğrulama, dönüşüm fonksiyonları
2. Kenar durumlar: boş girdi, null/undefined, sınır değerler, hatalı tip
3. Hata yolları: istisna fırlatma, hata mesajı, geri dönüş davranışı
4. Regresyonlar: düzeltilen her bug için o bug'ı yakalayan bir test
Test ETME: framework'ün kendisini, basit getter/setter'ları,
implementasyon detayını (private fonksiyon sırası gibi).
## 3. Test yapısı — AAA deseni
```ts
it("indirim oranı %100'ü aşarsa hata fırlatır", () => {
// Arrange — hazırlık
const sepet = sepetOlustur({ toplam: 100 });
// Act — eylem
const sonuc = () => indirimUygula(sepet, 1.2);
// Assert — doğrulama
expect(sonuc).toThrow("Geçersiz indirim oranı");
});
```
Kurallar:
- Test adı DAVRANIŞI anlatır: "çalışır" değil, "boş listede sıfır döner".
- Her test tek bir davranışı doğrular; bir test kırılınca sebep belli olsun.
- Testler birbirinden bağımsız: sıra değişince kırılmamalı, paylaşılan
mutable state olmamalı.
- Mock'u sınırda tut: ağ, saat, dosya sistemi mock'lanır; iş mantığı mock'lanmaz.
- Sabit zaman gerekiyorsa fake timer kullan; `Date.now()` ile yarışma.
## 4. Çalıştır ve doğrula
- Yazdığın testleri ÇALIŞTIR; çıktıyı görmeden "testler geçti" deme.
- Yeni test önce mevcut hatayı yakalıyor mu diye kontrol et
(düzeltme öncesi kırmızı, sonrası yeşil olmalı).
- Kırılan test varsa nedenini açıkla; assert'i gevşeterek "geçirtme".
## Korkuluklar
- Snapshot testini davranış testi yerine koyma; bilinçli kullan.
- Coverage sayısı hedef değil sonuçtur; %100 için anlamsız test yazma.
- Flaky (bazen geçen) test bırakma: zamanlama/sıra bağımlılığını kökten çöz.Değişiklik öner
Bu promptu yalnızca sahibi düzenleyebilir; ama sen bir iyileştirme önerebilirsin. Sahibi kabul ederse içerik güncellenir.