آمادهسازی دادهی مشترک با fixture
در بسیاری از تستها به داده یا شیء مشترکی نیاز داریم که باید پیش از هر تست آماده شود. fixture در pytest دقیقاً همین کار را انجام میدهد و از تکرار کد جلوگیری میکند.
import pytest
@pytest.fixture
def sample_cart():
return {"apple": 3, "banana": 2}
def test_cart_has_apple(sample_cart):
assert "apple" in sample_cart
def test_cart_total_items(sample_cart):
assert sum(sample_cart.values()) == 5هر تابع تست که نام fixture را بهعنوان پارامتر بگیرد، بهطور خودکار مقدار بازگشتی آن را دریافت میکند. pytest همچنین با @pytest.mark.parametrize امکان اجرای یک تست با چند مجموعه ورودی مختلف را فراهم میکند، بدون اینکه نیاز به نوشتن چند تابع تست جداگانه باشد:
@pytest.mark.parametrize("a, b, expected", [
(2, 3, 5),
(0, 0, 0),
(-1, 1, 0),
])
def test_add_multiple_cases(a, b, expected):
assert add(a, b) == expectedاین روش باعث میشود پوشش تست بیشتری با کد کمتر داشته باشید و اگر یکی از حالتها شکست بخورد، pytest دقیقاً مشخص میکند کدام مجموعه ورودی مشکل داشته است. استفادهی ترکیبی از fixture و parametrize، یکی از نشانههای تستنویسی حرفهای در پروژههای پایتون است.