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

نوشتن چند تست مستقل در پایتون؛ شمارش عددهای زوج

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

یک تست معمولاً فقط یک بخش از قرارداد رو می‌سنجه. برای تابع شمارش، حالت خالی، چند عضو مناسب و عضوهای نامناسب هرکدوم اطلاعات متفاوتی می‌دن. هدف زیادکردن تعداد assertها بدون دلیل نیست؛ هر تست باید احتمال یک باگ مشخص رو کم کنه. دو ورودی خیلی شبیه ممکنه عملاً همان رفتار رو دوباره بررسی کنن.

مثال شمارش رشته‌های بلند رو در حالت معمول و خالی می‌سنجه. فعالیت شمارش زوج‌ها به چند ورودی مکمل نیاز داره، چون نسخه‌های خراب مختلفی آماده شده. خطای رایج تعریف انتظار به‌صورت candidate(values) است؛ اون وقت تست هیچ معیار مستقلی نداره. عدد مورد انتظار رو با شمردن دستی عضوها تعیین کن. صفر و منفی زوج هم باید در شمارش سهم داشته باشن. تست تو تابع candidate رو می‌گیره، پس نباید به اسم نسخه درست وابسته باشه. wrapper هر بار یکی از نسخه‌ها رو انتخاب می‌کنه و یک بولی درباره موفقیت مجموعه assertهای تو برمی‌گردونه؛ False اینجا یعنی نسخه توسط تست رد شده.

✍️ مثال حل‌شده:

def test_long_count(candidate):
    assert candidate([]) == 0
    assert candidate(["a", "book", "web"]) == 2

def long_count(values):
    return sum(len(item) >= 3 for item in values)

test_long_count(long_count)

حالا نوبت توئه: برای تابع شمارش زوج‌ها test_candidate(candidate) بنویس. []=>0، [1,2,4]=>2، [-2,0,3]=>2 و [1,3]=>0 را بررسی کن. run_tests("correct") باید True و empty_bug، first_only و positive_only همگی False باشند. ورودی فقط فهرست عدد صحیح است؛ هر assert باید انتظار مستقل عددی داشته باشد.

فعالیت شما

برای تابع شمارش زوج‌ها test_candidate(candidate) بنویس. []=>0، [1,2,4]=>2، [-2,0,3]=>2 و [1,3]=>0 را بررسی کن. run_tests("correct") باید True و empty_bug، first_only و positive_only همگی False باشند. ورودی فقط فهرست عدد صحیح است؛ هر assert باید انتظار مستقل عددی داشته باشد.

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

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

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

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

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

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

def correct(values):
    return sum(1 for item in values if item % 2 == 0)

def empty_bug(values):
    return 1 if not values else correct(values)

def first_only(values):
    return int(bool(values) and values[0] % 2 == 0)

def positive_only(values):
    return sum(1 for item in values if item > 0 and item % 2 == 0)

CANDIDATES = {"correct": correct, "empty_bug": empty_bug, "first_only": first_only, "positive_only": positive_only}

def test_candidate(candidate):
    # چند انتظار مستقل برای شمارش زوج‌ها
    pass

def run_tests(candidate_name):
    candidate = CANDIDATES[candidate_name]
    try:
        test_candidate(candidate)
        return True
    except Exception:
        return False