Özet - Pytest
- Python kursu
- İleri seviye
- Ders 18/83
- 5 dk
fixture, parametrize ve monkeypatch'i birleştirerek bir hesap makinesi testi yazarsın.
Özet - Pytest
Bu grupta pytest'in temel araçlarını gördün. assert koşul denetler; fixture hazırlık kodunu testlere enjekte eder; parametrize aynı testi birçok veriyle çalıştırır; monkeypatch değerleri geçici değiştirir.
Son görevde parametrize ve bir yardımcı fonksiyonu birlikte kullanacaksın: bir filtre fonksiyonunu farklı girişlerle test edeceksin.
Uygulama parametrize ile filter testi
keep_positive(nums) fonksiyonu [n for n in nums if n > 0] döndürsün. test_keep_positive fonksiyonunu @pytest.mark.parametrize ile süsle; ilk dize "nums,expected", ikinci argüman [([1, -2, 3], [1, 3]), ([-1, -2], [])]. Test gövdesi assert keep_positive(nums) == expected içersin. Dosya sonunda test_keep_positive([1, -2, 3], [1, 3]) çağrısı ve print("ok") olsun.
Başlangıç kodu
import pytest
# keep_positive(nums): n > 0 olanları listele
# test_keep_positive: parametrize ile iki veri kullan
# test gövdesinde keep_positive(nums) ile expected değerini karşılaştır
# son olarak test_keep_positive([1, -2, 3], [1, 3]) ve print("ok")Örnek çözüm
import pytest
def keep_positive(nums):
return [n for n in nums if n > 0]
@pytest.mark.parametrize("nums,expected", [([1, -2, 3], [1, 3]), ([-1, -2], [])])
def test_keep_positive(nums, expected):
assert keep_positive(nums) == expected
test_keep_positive([1, -2, 3], [1, 3])
print("ok")Beklenen çıktı
ok
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir fonksiyonu birçok veriyle test etmenin en iyi yolu hangisi?
- Aynı testi elle kopyalayıp yapıştırmak
- @pytest.mark.parametrize kullanmak Doğru cevap
- Test içinde random veri üretmek
- Yalnızca tek bir sabit veriyle çalıştırmak
Açıklama: parametrize tekrarı önler ve veri güdümlü test sağlar.
2 Özet parametrize tamamla
import pytest
@____("nums,expected", [([1, 2, 3], 6), ([10, 20], 30)])
def test_sum(nums, expected):
assert sum(nums) == expected
import pytest
@pytest.mark.parametrize("nums,expected", [([1, 2, 3], 6), ([10, 20], 30)])
def test_sum(nums, expected):
assert sum(nums) == expected
Açıklama: pytest.mark.parametrize decorator'ü veri listesiyle testi yineler.
3 Grup araçlarını eşleştir
| Kavram | Anlamı |
|---|---|
assert |
Koşul denetler |
fixture |
Hazırlık enjekte eder |
parametrize |
Veri güdümlü yineler |
monkeypatch |
Geçici değiştirir |