Pytest unit test yazma sürecine yeni başlayanlar için ilk engel genellikle kurulum değil, "ne test edeceğim" sorusudur. Bu rehber, bu soruya yanıt vererek basit bir Python fonksiyonundan başlayıp gerçek test senaryoları yazmaya kadar götürür. **Unit test neden yazılır?** Bir fonksiyon değiştiğinde başka bir yeri bozmadığını manuel olarak kontrol etmek zaman alır ve hata payı yüksektir. Unit testler bu kontrolü otomatikleştirir: tek bir komutla bütün kritik noktaları saniyeler içinde kontrol edebilirsiniz. **Ön koşullar** - Python 3.7 veya üzeri - Test yazılacak bir Python projesi veya fonksiyon **Adım 1: Pytest'i kurun** ``` pip install pytest ``` Kurulumu doğrulamak için terminalde `pytest --version` yazın. **Adım 2: Test edilecek fonksiyonu yazın** `hesaplamalar.py` adında bir dosya oluşturun: ```python def topla(a, b): return a + b def bol(a, b): if b == 0: raise ValueError("Sıfıra bölme hatası") return a / b ``` **Adım 3: İlk pytest unit test dosyasını yazın** Aynı dizinde `test_hesaplamalar.py` adında yeni bir dosya oluşturun. Pytest, dosya adının `test_` ile başlamasını veya `_test` ile bitmesini bekler: ```python import pytest from hesaplamalar import topla, bol def test_toplama_pozitif_sayilar(): assert topla(2, 3) == 5 def test_toplama_negatif(): assert topla(-1, 1) == 0 def test_bol_normal(): assert bol(10, 2) == 5.0 def test_bol_sifira_bolme(): with pytest.raises(ValueError): bol(5, 0) ``` Test fonksiyonlarının adı da `test_` ile başlamalıdır; aksi takdirde pytest bu fonksiyonu atlar. **Adım 4: Testleri çalıştırın** Terminalde proje dizininize gidin ve şunu yazın: ``` pytest ``` Pytest otomatik olarak `test_` ön ekli dosyaları bulur ve çalıştırır. Başarılı testler yeşil nokta (`.`) ile gösterilir, başarısız testler `F` harfiyle. **Adım 5: Çıktıyı okuyun** Pytest unit test çıktısında şunlara dikkat edin: - `4 passed`: Tüm testler geçti - `FAILED test_hesaplamalar.py::test_bol_normal`: Hangi testin neden başarısız olduğunu gösterir - `AssertionError`: Beklenen ve gerçek değerleri karşılaştırmalı gösterir Daha ayrıntılı çıktı için `pytest -v` komutunu kullanın. **Adım 6: Parametreli testler yazın** Aynı fonksiyonu birden fazla girdiyle test etmek için `@pytest.mark.parametrize` dekoratörünü kullanın: ```python @pytest.mark.parametrize("a, b, beklenen", [ (1, 2, 3), (0, 0, 0), (-5, 5, 0), (100, -50, 50) ]) def test_toplama_parametreli(a, b, beklenen): assert topla(a, b) == beklenen ``` Bu yapı, tek bir test fonksiyonuyla dört farklı senaryoyu otomatik olarak dener. **Yaygın hatalar** - Test fonksiyonuna `test_` ön eki koymamak: Pytest bu fonksiyonu görmez, test sayılmaz. - Sadece başarılı senaryoları test etmek: Hata durumlarını (`ValueError`, `None` girdi vb.) da test edin. - Test bağımsızlığını bozmak: Her test fonksiyonu bağımsız çalışabilmeli; bir testin sonucu bir diğerini etkilememeli. Pytest unit test yazma alışkanlığı, küçük bir yatırım gibi görünür ama zamanla büyük zaman tasarrufu sağlar. Testler olmadan her değişiklik potansiyel olarak gizli bir hatadır.