حالت آفلاین — محتوا از حافظهٔ کش نمایش داده می‌شود
آموزش دیباگ و تست‌نویسی در پایتون؛ رفع خطا با تمرین

نوشتن پیام روشن برای assert پایتون؛ تشخیص تست صفر و منفی

تست‌نویسی پایتون با assert و آزمون‌های مؤثر · 0٪

پیام 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 برگرداند. خروجی تست را چاپ نکن.

مطالعهٔ این گام برای همه آزاد است

برای پاسخ‌دادن، بررسی پاسخ، ثبت پیشرفت و استفاده از دستیار باید شرایط شرکت در فعالیت‌ها را داشته باشید.

برای انجام فعالیت وارد شوید

فعالیت‌های این بخش به اشتراک فعال نیاز دارند. تهیهٔ اشتراک

برای انجام فعالیت‌ها ابتدا این دوره‌های پیش‌نیاز را تکمیل کنید:

کد اولیهٔ فعالیت

def correct(number):
    return number * 2

def sign_bug(number):
    return abs(number) * 2

def zero_bug(number):
    return 1 if number == 0 else number * 2

CANDIDATES = {"correct": correct, "sign_bug": sign_bug, "zero_bug": zero_bug}

def test_candidate(candidate):
    # سه انتظار با پیام‌های مشخص
    pass

def run_tests(candidate_name):
    try:
        test_candidate(CANDIDATES[candidate_name])
        return {"passed": True, "message": ""}
    except AssertionError as error:
        return {"passed": False, "message": str(error)}