CodeBlanks Logo Icon CodeBlanks

fixture

@pytest.fixture ile fixture'ları öğrenirsin.

fixture

fixture, testlerin paylaştığı hazırlık kodudur. Veritabanı bağlantısı, örnek veri ya da geçici dosya gibi şeyleri kurar; test bittiğinde temizler.

Bir fonksiyonu @pytest.fixture ile süslersin; testler onu parametre adıyla çağırır. pytest, fixture'ı çalıştırıp sonucu parametreye enjekte eder.

import pytest

@pytest.fixture
def sample_list():
    return [1, 2, 3]

def test_total(sample_list):
    assert sum(sample_list) == 6

Bu teknik, tekrarlanan kurulumu önler ve testleri kısa tutar.

fixture kapsamı

fixture'lar her test için yeniden çalışır (varsayılan scope="function"). Ağır hazırlıklarda bunu değiştirebilirsin: scope="module" modül başına bir kez, scope="session" tüm oturumda bir kez çalıştırır.

@pytest.fixture(scope="module")
def db():
    return open_connection()

Kapsamı büyütmek hız kazandırır ama durum paylaşımına dikkat et: bir test veriyi değiştirirse sonraki testler etkilenir. Bu yüzden çoğu fixture function kapsamında kalır.

Uygulama fixture ile sample_list kullan

import pytest ile başla. @pytest.fixture ile süslenmiş sample_list() fonksiyonu [1, 2, 3] döndürsün. test_total(sample_list) test fonksiyonu assert sum(sample_list) == 6 denetimi yapsın. Dosya sonunda test_total(sample_list()) çağrısı ve print("ok") olsun.

Başlangıç kodu

main.py
# pytest modülünü içe aktar
# sample_list: fixture, [1, 2, 3] döndürür
# test_total(sample_list): sum denetimi yapar
# test_total(sample_list()) çağrısı ve "ok" yazdır

Örnek çözüm

main.py
import pytest

@pytest.fixture
def sample_list():
    return [1, 2, 3]

def test_total(sample_list):
    assert sum(sample_list) == 6

test_total(sample_list())
print("ok")

Beklenen çıktı

ok

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir fixture testte nasıl kullanılır?

  • import ile içe aktarılır
  • Global değişken olarak atanır
  • Test fonksiyonuna parametre olarak verilir Doğru cevap
  • print ile yazdırılır

Açıklama: pytest, fixture adıyla aynı olan parametreye fixture sonucunu enjekte eder.

2 fixture kavramlarını eşleştir

Kavram Anlamı
@pytest.fixture Fixture işaretçisi
def sample_list Fixture tanımı
test_total(sample_list) Fixture'ı kullanır
scope="module" Modül başına bir kez

3 fixture decorator'ünü ekle

Soru
import pytest

@____(scope="module")
def db():
    return open_connection()
Cevap
import pytest

@pytest.fixture(scope="module")
def db():
    return open_connection()

Açıklama: @pytest.fixture işaretçisi fonksiyonu fixture yapar; scope module bir kez çalıştırır.

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