پیام assert باید کمک کنه بفهمیم کدام انتظار شکسته، نه فقط بگه «خطا». در مجموعهای از تستها، پیام کوتاه و مشخص مسیر بررسی رو سریعتر میکنه. میتونیم نام حالت مثل zero یا negative رو انتخاب کنیم تا بدون دیدن تمام ورودیها، خانواده مسئله روشن باشه. پیام رو بعد از شرط و با ویرگول مینویسیم.
مثال یک آزمون برای تخفیف صفر داره و نام حالت رو در شکست نشان میده. در این فعالیت خودت تابع محاسباتی رو نمینویسی؛ تستی مینویسی که یک تابع ورودی به اسم candidate رو بررسی کنه. wrapper آماده نام متنی نسخه رو به تابع واقعی وصل میکنه و نتیجه رو به دیکشنری JSONپذیر تبدیل میکنه. خطای رایج تستکردن مستقیم correct بهجای candidate است؛ اون تست هیچ نسخه خراب دیگری رو واقعاً بررسی نمیکنه. باید نسخه درست پذیرفته بشه و دو نسخه خراب با پیام مرتبط رد بشن. ترتیب تستها هم روشنه تا نتیجه شکست قابل پیشبینی بمونه.
✍️ مثال حلشده:
def test_identity(candidate):
assert candidate(0) == 0, "zero discount"
def identity(value):
return value
test_identity(identity)
حالا نوبت توئه: test_candidate(candidate) را کامل کن: بهترتیب candidate(3)==6 با پیام "positive"، candidate(0)==0 با پیام "zero" و candidate(-2)==-4 با پیام "negative" را assert کن. wrapper را نگه دار؛ run_tests("correct") باید {"passed":true,"message":""}، sign_bug پیام negative و zero_bug پیام zero برگرداند. خروجی تست را چاپ نکن.
فعالیت شما
test_candidate(candidate) را کامل کن: بهترتیب candidate(3)==6 با پیام "positive"، candidate(0)==0 با پیام "zero" و candidate(-2)==-4 با پیام "negative" را assert کن. wrapper را نگه دار؛ run_tests("correct") باید {"passed":true,"message":""}، sign_bug پیام negative و zero_bug پیام zero برگرداند. خروجی تست را چاپ نکن.