Yeni Fonksiyona Kenar Durum Birim Test İskeleti
Fonksiyonun kenar durumlarını tek tek gezen, doldurmaya hazır bir test iskeleti alırsın: hangi girdilerin test edilmesi gerektiğini sıfırdan düşünmek yerine listeyi gözden geçirip onaylarsın, bir de test yazarken çıkan olası hatalar not düşülür.
Fonksiyonu yazdın, mutlu yolda çalıştı, commit ettin. Test yazmayı "sonra" diye erteledin; ama boş liste, null, sınır değeri gibi durumları kimse saymadı ve o hatayı prod'da ilk öğrenen sen olmak istemezsin.
Sana yeni yazılmış bir fonksiyon vereceğim. Görevin bunun birim test iskeletini çıkarmak. Amaç mutlu yolu doğrulamak değil, gözden kaçan kenar durumlarını yakalamak.
Kurallar:
1. Önce fonksiyonu oku. Dilini ve test çatısını (pytest, JUnit, Jest, xUnit gibi) koddan tespit et. Tespit edemezsen tahmin yürütme; en üste "EKSIK: test çatısı belirtilmedi" yaz ve fonksiyonun diline uygun genel bir iskelet ver.
2. Kenar durumlarını çıkar. En az şunları tara: boş veya null girdi; sıfır, negatif ve çok büyük değerler; sınır değerleri (0, 1, üst limit ve üst limitin bir fazlası); yanlış tip; boş koleksiyon ve tek elemanlı koleksiyon; tekrarlı eleman; boşluk ve özel karakter içeren metin; dış bağımlılık (ağ, veritabanı, saat, rastgelelik) hata verdiğinde; çağrılar arası paylaşılan durum sızıntısı.
3. Sadece bu fonksiyonda gerçekten mümkün olan durumları al. Fonksiyonla ilgisi olmayanı listeleme.
4. Her durum için bir test iskeleti yaz: durumu anlatan açık bir isim, hazırlık satırları, fonksiyon çağrısı ve beklenen sonucu kontrol eden doğrulama satırı.
5. Bir durumda beklenen davranış koddan net anlaşılmıyorsa doğrulamayı uydurma. O satıra yorum olarak "TODO netleştir: beklenen davranış belirsiz" yaz.
6. En sona "Riskli gördüklerim" başlığı ekle; test yazarken fark ettiğin en fazla 3 olası hatayı tek cümleyle yaz.
Fonksiyon:
[FONKSİYONU BURAYA YAPIŞTIR]
Fonksiyonun kenar durumlarını tek tek gezen, doldurmaya hazır bir test iskeleti alırsın: hangi girdilerin test edilmesi gerektiğini sıfırdan düşünmek yerine listeyi gözden geçirip onaylarsın, bir de test yazarken çıkan olası hatalar not düşülür. Birkaç dakika.
Testli kod gönderen ve hatayı gözden geçirmede değil kendi masasında yakalayan kişi olarak görünürsün.
AI sadece kodda yazanı görür, fonksiyonun ne yapması gerektiğini bilmez; gerçek beklenen değerleri ve iş kuralını sen doldurmalısın ve fonksiyonda gerçek anahtar veya müşteri verisi gömülüyse yapıştırmadan önce temizle.
def sepet_indirimi(kalemler, kupon=None):
# sepetteki kalemleri toplar, kademe indirimi + kupon uygular
toplam = 0
for k in kalemler:
toplam += k["fiyat"] * k["adet"]
if toplam > 1000:
toplam = toplam * 0.9
elif toplam > 500:
toplam = toplam * 0.95
if kupon == "ILKALISVERIS":
toplam = toplam - 50
return round(toplam, 2)EKSIK: test çatısı belirtilmedi — kodda bir test çatısı içe aktarılmamış. Aşağıdaki iskelet, dile uygun genel bir seçim olarak pytest ile yazıldı.
Tespit
- Dil: Python 3
- Fonksiyon:
sepet_indirimi(kalemler, kupon=None)
Kenar durumları ve test iskeleti
```python
import pytest
from modul import sepet_indirimi
def test_bos_sepet_sifir_doner():
assert sepet_indirimi([]) == 0
def test_kalemler_none_typeerror():
# None üzerinde döngü TypeError fırlatmalı
with pytest.raises(TypeError):
sepet_indirimi(None)
def test_eksik_adet_anahtari_keyerror():
with pytest.raises(KeyError):
sepet_indirimi([{"fiyat": 100}]) # 'adet' yok
def test_500_siniri_indirim_yok():
# tam 500: '> 500' False → indirim uygulanmaz
assert sepet_indirimi([{"fiyat": 500, "adet": 1}]) == 500
def test_501_yuzde5():
assert sepet_indirimi([{"fiyat": 501, "adet": 1}]) == 475.95
def test_1000_siniri_yuzde5():
# tam 1000: '> 1000' False → yalnız %5
assert sepet_indirimi([{"fiyat": 1000, "adet": 1}]) == 950.0
def test_1001_yuzde10():
assert sepet_indirimi([{"fiyat": 1001, "adet": 1}]) == 900.9
def test_negatif_fiyat():
# TODO netleştir: negatif fiyat kabul edilmeli mi, koddan belli değil
assert sepet_indirimi([{"fiyat": -100, "adet": 1}]) == -100
def test_kupon_toplami_negatife_dusurebilir():
# TODO netleştir: kupon sonrası negatif toplam engellenmeli mi
assert sepet_indirimi([{"fiyat": 10, "adet": 1}], kupon="ILKALISVERIS") == -40
def test_bilinmeyen_kupon_etkisiz():
assert sepet_indirimi([{"fiyat": 100, "adet": 1}], kupon="GECERSIZ") == 100
def test_fiyat_yanlis_tip_string():
with pytest.raises(TypeError):
sepet_indirimi([{"fiyat": "abc", "adet": 2}])
```
Riskli gördüklerim
- 500 ve 1000 tam sınır değerlerinde
>kullanıldığı için indirim bir kademe geç başlıyor; iş kuralı>=bekliyorsa hata tam burada. - Kupon toplamı negatife düşürebilir; alt sınır (0) kontrolü yok.
- Eksik
fiyat/adetanahtarı ya da string fiyat, dışarıdan gelen veride doğrulanmadan KeyError/TypeError'a dönüşüyor.
ÜRETİM: TEM 2026 · CLAUDE Bu kayıt eşlenmiş örnek girdi ve çıktı içerir. Model koşumu kanıtı yoktur — kendi verinle doğrulamadan karar girdisi yapma.
Sana yeni yazılmış bir fonksiyon vereceğim. Görevin bunun birim test iskeletini çıkarmak. Amaç mutlu yolu doğrulamak değil, gözden kaçan kenar durumlarını yakalamak.
Kurallar:
1. Önce fonksiyonu oku. Dilini ve test çatısını (pytest, JUnit, Jest, xUnit gibi) koddan tespit et. Tespit edemezsen tahmin yürütme; en üste "EKSIK: test çatısı belirtilmedi" yaz ve fonksiyonun diline uygun genel bir iskelet ver.
2. Kenar durumlarını çıkar. En az şunları tara: boş veya null girdi; sıfır, negatif ve çok büyük değerler; sınır değerleri (0, 1, üst limit ve üst limitin bir fazlası); yanlış tip; boş koleksiyon ve tek elemanlı koleksiyon; tekrarlı eleman; boşluk ve özel karakter içeren metin; dış bağımlılık (ağ, veritabanı, saat, rastgelelik) hata verdiğinde; çağrılar arası paylaşılan durum sızıntısı.
3. Sadece bu fonksiyonda gerçekten mümkün olan durumları al. Fonksiyonla ilgisi olmayanı listeleme.
4. Her durum için bir test iskeleti yaz: durumu anlatan açık bir isim, hazırlık satırları, fonksiyon çağrısı ve beklenen sonucu kontrol eden doğrulama satırı.
5. Bir durumda beklenen davranış koddan net anlaşılmıyorsa doğrulamayı uydurma. O satıra yorum olarak "TODO netleştir: beklenen davranış belirsiz" yaz.
6. En sona "Riskli gördüklerim" başlığı ekle; test yazarken fark ettiğin en fazla 3 olası hatayı tek cümleyle yaz.
Fonksiyon:
[FONKSİYONU BURAYA YAPIŞTIR]
Yapıştırdığın veri tarayıcından çıkmaz — WhiteYaka'ya gönderilmez. Prompt panoya kopyalanır; açılan sohbete Ctrl/⌘ + V ile yapıştırırsın.
Bülten kaydı kapalı.
Bu sayfa e-posta adresi toplamaz ve liste kaydı başlatmaz. 160 hamlenin tamamı giriş yapmadan açık.