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

نوشتن تست مرز مجاز در پایتون؛ شامل‌بودن صفر و صد

تست حالت‌های مرزی و ورودی نامعتبر در پایتون · 0٪

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

مثال مرزهای مجاز یک ظرفیت ده‌تایی رو می‌سنجه. فعالیت دو نسخه خراب داره که هرکدوم یکی از مرزها رو حذف کرده. خطای رایج استفاده از انتظار False برای همه عددهای «لبه» است؛ لبه همیشه نامعتبر نیست و باید جمله مسئله رو بخونی. تست‌های تو یک تابع ورودی رو می‌سنجن، پس نباید خودت نتیجه رو فقط از روی نام candidate بسازی. هر assert باید فراخوانی واقعی داشته باشه. برای منفی یک و صد‌ویک هم انتظار بولی بده؛ این تابع اعتبارسنجی فقط True/False برمی‌گردونه و استثنا قراردادش نیست.

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

def within_capacity(value):
    return 0 <= value <= 10

assert within_capacity(0) is True
assert within_capacity(10) is True
assert within_capacity(11) is False

حالا نوبت توئه: test_candidate(candidate) را برای تابع اعتبار امتیاز در بازه بسته ۰ تا ۱۰۰ بنویس. ورودی‌های 0،100،50 باید True و -1،101 باید False شوند. run_tests("correct") باید True و excludes_lower و excludes_upper باید False باشند. wrapper را حفظ کن؛ candidate استثنا نمی‌دهد و خروجی آن بولی است.

فعالیت شما

test_candidate(candidate) را برای تابع اعتبار امتیاز در بازه بسته ۰ تا ۱۰۰ بنویس. ورودی‌های 0،100،50 باید True و -1،101 باید False شوند. run_tests("correct") باید True و excludes_lower و excludes_upper باید False باشند. wrapper را حفظ کن؛ candidate استثنا نمی‌دهد و خروجی آن بولی است.

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

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

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

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

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

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

def correct(score):
    return 0 <= score <= 100

def excludes_lower(score):
    return 0 < score <= 100

def excludes_upper(score):
    return 0 <= score < 100

CANDIDATES = {"correct": correct, "excludes_lower": excludes_lower, "excludes_upper": excludes_upper}

def test_candidate(candidate):
    # مرزها، داخل و بیرون بازه
    pass

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