تستی که همیشه موفق میشه الزاماً تست خوبی نیست. باید بپرسیم آیا یک پیادهسازی معقول ولی غلط میتونه ازش عبور کنه؟ برای تابع بیشینه، فهرست مثبت و صعودی بهتنهایی خیلی ضعیفه: نسخهای که فقط آخرین عضو رو برمیگردونه هم موفق میشه. دادهای انتخاب کن که جواب درست رو از رفتار خراب جدا کنه.
مثال برای کمینه، کوچکترین عضو رو وسط فهرست میذاره تا خواندن صرف عضو اول کافی نباشه. فعالیت تو دو باگ شناختهشده داره: شروع بیشینه از صفر و برگرداندن آخرین عضو. خطای رایج تغییر جواب مورد انتظار برای سبزشدن تسته؛ انتظار باید از قرارداد مستقل بیاد. تستهای موجود رو تقویت کن تا نسخه درست قبول و هر دو نسخه خراب رد بشن. ورودیها همیشه فهرست غیرخالی عدد صحیح هستن، پس لازم نیست برای فهرست خالی رفتار تازهای تعریف کنی. wrapper فقط نام نسخه رو به candidate وصل میکنه؛ تصمیم تشخیص باگ داخل assertهای تو اتفاق میافته.
✍️ مثال حلشده:
def test_minimum(candidate):
assert candidate([8, 2, 6]) == 2
test_minimum(min)
حالا نوبت توئه: test_candidate(candidate) را برای بیشینه فهرست غیرخالی اصلاح کن. حداقل [2,8,3]=>8، [-7,-2,-5]=>-2 و [4]=>4 را assert کن. run_tests("correct") باید True و نسخههای starts_at_zero و last_only باید False شوند. wrapper و نسخههای آماده را نگه دار؛ آزمون باید خود candidate را اجرا کند.
فعالیت شما
test_candidate(candidate) را برای بیشینه فهرست غیرخالی اصلاح کن. حداقل [2,8,3]=>8، [-7,-2,-5]=>-2 و [4]=>4 را assert کن. run_tests("correct") باید True و نسخههای starts_at_zero و last_only باید False شوند. wrapper و نسخههای آماده را نگه دار؛ آزمون باید خود candidate را اجرا کند.