Test Fixture
- Okunuşu
- test fiksçır
Kısaca
Test fixture, bir testin çalışmadan önce ihtiyaç duyduğu örnek veri ya da yapılandırılmış nesne gibi bilinen durum ile onu kurup temizleyen koddur.
Test fixture nedir?
Test fixture, bir testin çalışabilmesi için önceden yerinde olması gereken her şeydir ve her seferinde tam olarak aynı şekilde hazırlanır. Bir veritabanındaki birkaç örnek kayıt, girdi dosyaları içeren geçici bir klasör, yapılandırılmış bir nesne ya da çalışan bir test sunucusu olabilir. Her çalıştırma aynı bilinen başlangıç noktasından başladığı için testin sonucu yalnızca test edilen koda bağlıdır.
Çoğu çerçeve bir fixture'ın ömrünü ikiye ayırır: durumu oluşturan kurulum (setup) ve test başarısız olsa bile durumu temizleyen sökme (teardown). Bazı çerçeveler setUp ve tearDown gibi metotlar ya da beforeEach ve afterEach gibi hook'lar kullanır; pytest ise adını bir parametre olarak yazan her teste verilen fixture fonksiyonları kullanır. Fixture'lar her test için, her dosya için ya da tüm çalıştırma için bir kez oluşturulabilir: bir veritabanı konteyneri gibi pahalı bir fixture'ı paylaşmak zaman kazandırır, ancak testlerin değiştirdiği paylaşılan veri testleri birbirine bağımlı kılıp kararsız hâle getirebilir.
Fixture, her gösteriden önce aynı biçimde düzenlenen bir tiyatro sahnesi gibidir; böylece oyuncular her eşyanın aynı yerde olduğuna güvenebilir. Fixture'lar birim testlerinde (hazırlanmış bir nesne), entegrasyon testlerinde (başlangıç verisi yüklenmiş bir veritabanı) ve uçtan uca testlerde (oturum açmış bir kullanıcı hesabı) görülür. Sözcük, test kayıtlarıyla dolu JSON ya da SQL dosyaları gibi statik örnek veri dosyaları için de kullanılır.
Test fixture'ları sıklıkla mock'larla karıştırılır. Fixture, testin içinde çalıştığı dünyayı hazırlar; mock ise test edilen kodun çağırdığı bir bağımlılığın sahte vekilidir. Bir fixture bir mock oluşturup teslim edebilir, ancak pek çok fixture bellek içi bir veritabanı ya da geçici bir dosya gibi gerçek şeylerdir.
Önemli noktalar
- Fixture, bir testin dayandığı bilinen başlangıç durumudur.
- Kurulum durumu oluşturur, sökme ise sonrasında temizler.
- Fixture'ların kapsamı test başına, dosya başına ya da test çalıştırması başına olabilir.
- Testlerin değiştirdiği paylaşılan fixture'lar, flaky testlerin yaygın bir nedenidir.
- Fixture ortamı hazırlar; mock bir bağımlılığın yerini alır.
Örnek
import sqlite3
import pytest
@pytest.fixture
def db():
# Setup: a fresh in-memory database with known data for every test
conn = sqlite3.connect(":memory:")
conn.execute("CREATE TABLE users (name TEXT)")
conn.execute("INSERT INTO users VALUES ('Ada'), ('Grace')")
yield conn # the test runs here
conn.close() # Teardown: runs even if the test fails
def test_counts_users(db):
assert db.execute("SELECT COUNT(*) FROM users").fetchone() == (2,)Sık sorulan sorular
Fixture ile mock arasındaki fark nedir?
Fixture, bir testin ihtiyaç duyduğu durumu ya da kaynakları, örneğin veriyi ya da geçici bir dosyayı hazırlar. Mock ise kodun çağırdığı bir bağımlılığın sahte sürümüdür ve nasıl kullanıldığını da kaydedebilir.
Testlerde setup ve teardown nedir?
Setup, bir testin fixture'ını çalışmadan önce hazırlayan kod, teardown ise sonrasında kaldıran ya da sıfırlayan koddur. İkisi birlikte her testi kendisinden önce çalışanlardan bağımsız tutar.
İlgili sayfalar
- MockingTest ve Kalite, s. 16Mocking, kodu yalıtılmış biçimde test etmek için veritabanı ya da API gibi gerçek bir bağımlılığı kontrol ettiğiniz bir sahteyle değiştiren test tekniğidir.
- Birim TestiTest ve Kalite, s. 4Birim testi, bir fonksiyonun, metodun ya da sınıfın programın geri kalanından yalıtılmış olarak doğru davrandığını doğrulayan küçük ve otomatik bir kontroldür.
- Entegrasyon TestiTest ve Kalite, s. 7Entegrasyon testi, kod, veritabanı ve API gibi bir sistemin birkaç parçasının birlikte doğru çalışıp çalışmadığını kontrol eden otomatik bir testtir.
- Test RunnerTest ve Kalite, s. 34Test runner, bir projenin otomatik testlerini genellikle tek komutla bulan, çalıştıran ve hangilerinin geçtiğini ya da başarısız olduğunu raporlayan araçtır.
- Flaky TestTest ve Kalite, s. 8Flaky test, koda hiçbir değişiklik yapılmadan bazen geçen bazen başarısız olan ve sonuçlarına güvenmeyi zorlaştıran otomatik bir testtir.
- AssertionTest ve Kalite, s. 2Assertion, kodun o noktasında bir koşulun doğru olması gerektiğini bildiren ve koşul yanlışsa testi ya da programı bir hatayla durduran ifadedir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin