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

تست جدول‌محور در پایتون؛ اجرای زوج‌های ورودی و انتظار با حلقه

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

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

مثال تابع دوبرابر رو با سه زوج بررسی می‌کنه. فعالیت قدرمطلق رو می‌سنجه و یک ورودی منفی نزدیک صفر هم عمداً داره. خطای رایج پرکردن ستون expected با اجرای خود candidate است؛ این کار جدول رو بی‌اثر می‌کنه. انتظارها رو ثابت بنویس و در هر دور خروجی واقعی رو با همان ردیف مقایسه کن. اگر یک ردیف شکست بخوره، assert اجرای تست رو متوقف می‌کنه و wrapper نسخه رو ردشده گزارش می‌ده. نیازی به چاپ تک‌تک جواب‌ها نیست. ترکیب منفی، صفر و مثبت، پوشش بیشتری نسبت به چند عدد مثبت مشابه فراهم می‌کنه.

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

def test_twice(candidate):
    cases = [(1, 2), (0, 0), (-3, -6)]
    for value, expected in cases:
        assert candidate(value) == expected

حالا نوبت توئه: test_candidate(candidate) را با جدول cases شامل (-3,3)، (-1,1)، (0,0) و (4,4) و یک حلقه بنویس. هر ردیف باید مقدار بازگشتی قدرمطلق را با expected ثابت مقایسه کند. run_tests("correct") باید True و unchanged، minus_one_bug و positive_bug باید False شوند. تابع یا wrapper آماده را بازنویسی نکن.

فعالیت شما

test_candidate(candidate) را با جدول cases شامل (-3,3)، (-1,1)، (0,0) و (4,4) و یک حلقه بنویس. هر ردیف باید مقدار بازگشتی قدرمطلق را با expected ثابت مقایسه کند. run_tests("correct") باید True و unchanged، minus_one_bug و positive_bug باید False شوند. تابع یا wrapper آماده را بازنویسی نکن.

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

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

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

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

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

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

def correct(number):
    return abs(number)

def unchanged(number):
    return number

def minus_one_bug(number):
    return 0 if number == -1 else abs(number)

def positive_bug(number):
    return number + 1 if number > 0 else abs(number)

CANDIDATES = {"correct": correct, "unchanged": unchanged, "minus_one_bug": minus_one_bug, "positive_bug": positive_bug}

def test_candidate(candidate):
    # جدول و حلقه بررسی
    pass

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