CodeBlanks Logo Icon CodeBlanks

Özet - Pytest

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

main.py
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

main.py
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

Soru
import pytest

@____("nums,expected", [([1, 2, 3], 6), ([10, 20], 30)])
def test_sum(nums, expected):
    assert sum(nums) == expected
Cevap
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

İleri seviye bölümündeki tüm dersler