فصل ششم: تست حرفه‌ای با pytest و بسته‌بندی پروژه

Fixture و پارامتری‌سازی تست‌ها

آماده‌سازی داده‌ی مشترک با 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، یکی از نشانه‌های تست‌نویسی حرفه‌ای در پروژه‌های پایتون است.

برای ذخیره‌ی پیشرفت و شرکت در آزمون، وارد شوید — رایگان است.