اگر مبلغ نهایی غلطه، بهتره جمع پایه و تخفیف رو جدا بررسی کنیم. 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 شوند. ورودی قیمتهای صحیح نامنفی است؛ تابع تست نباید ورودی را خودش پاک کند.