وقتی چند تست ساختار یکسان دارن، میتونیم داده تست رو از اجرای اون جدا کنیم. یک فهرست از زوجهای ورودی و انتظار میسازیم و با حلقه روی آن میریم. به این شیوه گاهی تست جدولمحور میگیم. مزیتش کمشدن کپی دستورها و واضحشدن مجموعه حالتهاست؛ اما هنوز باید انتظار هر ردیف مستقل و درست تعیین بشه.
مثال تابع دوبرابر رو با سه زوج بررسی میکنه. فعالیت قدرمطلق رو میسنجه و یک ورودی منفی نزدیک صفر هم عمداً داره. خطای رایج پرکردن ستون expected با اجرای خود candidate است؛ این کار جدول رو بیاثر میکنه. انتظارها رو ثابت بنویس و در هر دور خروجی واقعی رو با همان ردیف مقایسه کن. اگر یک ردیف شکست بخوره، assert اجرای تست رو متوقف میکنه و wrapper نسخه رو ردشده گزارش میده. نیازی به چاپ تکتک جوابها نیست. ترکیب منفی، صفر و مثبت، پوشش بیشتری نسبت به چند عدد مثبت مشابه فراهم میکنه.
✍️ مثال حلشده:
def test_twice(candidate):
cases = [(1, 2), (0, 0), (-3, -6)]
for value, expected in cases:
assert candidate(value) == expected
حالا نوبت توئه: test_candidate(candidate) را با جدول cases شامل (-3,3)، (-1,1)، (0,0) و (4,4) و یک حلقه بنویس. هر ردیف باید مقدار بازگشتی قدرمطلق را با expected ثابت مقایسه کند. run_tests("correct") باید True و unchanged، minus_one_bug و positive_bug باید False شوند. تابع یا wrapper آماده را بازنویسی نکن.
فعالیت شما
test_candidate(candidate) را با جدول cases شامل (-3,3)، (-1,1)، (0,0) و (4,4) و یک حلقه بنویس. هر ردیف باید مقدار بازگشتی قدرمطلق را با expected ثابت مقایسه کند. run_tests("correct") باید True و unchanged، minus_one_bug و positive_bug باید False شوند. تابع یا wrapper آماده را بازنویسی نکن.