تعریفکردن تابع تست بهتنهایی اون رو اجرا نمیکنه. وقتی چند آزمون کوچک داریم، باید یک تابع هماهنگکننده همهشون رو صدا بزنه. این مجموعه میتونه فقط چند تابع معمولی و assert باشه. هر آزمون مسئول یک خانواده رفتار میشه و هماهنگکننده تضمین میکنه هیچ بخش مهمی فراموش نشده.
مثال، تست عادی و مرزی یک تابع دوبرابر رو از هم جدا میکنه و در run_all هر دو رو اجرا میکنه. فعالیت یک تابع جمع داره و باید آزمون معمول، خالی و منفی در مجموعه حضور داشته باشن. خطای رایج نوشتن test_empty بدون پرانتز است؛ اون عبارت فقط به تابع اشاره میکنه و فراخوانی نیست. همینطور اگر candidate رو به تابع کمکی نفرستی، نسخه آماده موردنظر واقعاً بررسی نمیشه. مجموعه درست باید نسخه سالم رو بپذیره و هر نسخه ناقص رو از مسیر تست مرتبط رد کنه. نامها و ساختار پیشنهادی خواندن شکستها رو راحت میکنن، ولی معیار اصلی رفتار واقعی مجموعه هنگام اجراست.
✍️ مثال حلشده:
def test_normal(candidate):
assert candidate(3) == 6
def test_zero(candidate):
assert candidate(0) == 0
def run_all(candidate):
test_normal(candidate)
test_zero(candidate)
run_all(lambda value: value * 2)
حالا نوبت توئه: تابعهای test_normal، test_empty و test_negative را برای جمع فهرست عدد صحیح بنویس و هر سه را از test_candidate(candidate) فراخوانی کن. انتظارها: [2,3,4]=>9، []=>0 و [-4,1]=>-3. run_tests("correct") باید True و empty_bug، negative_bug و first_bug باید False شوند. فقط تعریف تست کافی نیست؛ هماهنگکننده باید آنها را اجرا کند.
فعالیت شما
تابعهای test_normal، test_empty و test_negative را برای جمع فهرست عدد صحیح بنویس و هر سه را از test_candidate(candidate) فراخوانی کن. انتظارها: [2,3,4]=>9، []=>0 و [-4,1]=>-3. run_tests("correct") باید True و empty_bug، negative_bug و first_bug باید False شوند. فقط تعریف تست کافی نیست؛ هماهنگکننده باید آنها را اجرا کند.