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

پروژه تست پایتون؛ آزمون مستقل subtotal و حفظ قیمت‌های ورودی

پروژه دیباگ پایتون؛ تعمیر فاکتور و جلوگیری از بازگشت باگ · 0٪

اگر مبلغ نهایی غلطه، بهتره جمع پایه و تخفیف رو جدا بررسی کنیم. subtotal فقط مسئول جمع قیمت‌هاست و نباید درباره درصد تصمیم بگیره. تست مستقل این تابع باعث می‌شه وقتی پروژه بزرگ‌تر شد، سریع بفهمیم ایراد از جمعه یا مرحله بعد. قرارداد حفظ ورودی هم مهمه، چون همان قیمت‌ها ممکنه بعداً برای نمایش ردیف‌ها استفاده بشن.

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

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

def test_total(candidate):
    amounts = [20, 30]
    assert candidate(amounts) == 50
    assert amounts == [20, 30]

test_total(sum)

حالا نوبت توئه: test_candidate(candidate) را برای subtotal کامل کن: []=>0، [50]=>50 و [100,200]=>300. بعد از فراخوانی چندقیمتی، همان فهرست باید [100,200] مانده باشد. run_tests("correct") باید True و first_only، last_only و mutates باید False شوند. ورودی قیمت‌های صحیح نامنفی است؛ تابع تست نباید ورودی را خودش پاک کند.

فعالیت شما

test_candidate(candidate) را برای subtotal کامل کن: []=>0، [50]=>50 و [100,200]=>300. بعد از فراخوانی چندقیمتی، همان فهرست باید [100,200] مانده باشد. run_tests("correct") باید True و first_only، last_only و mutates باید False شوند. ورودی قیمت‌های صحیح نامنفی است؛ تابع تست نباید ورودی را خودش پاک کند.

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

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

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

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

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

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

def correct(prices):
    return sum(prices)

def first_only(prices):
    return prices[0] if prices else 0

def last_only(prices):
    return prices[-1] if prices else 0

def mutates(prices):
    total = sum(prices)
    prices.clear()
    return total

CANDIDATES = {"correct": correct, "first_only": first_only, "last_only": last_only, "mutates": mutates}

def test_candidate(candidate):
    # خروجی و حفظ داده را بررسی کن
    pass

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