درصد تخفیف این فاکتور باید داخل بازه بسته صفر تا صد باشه. صفر یعنی بدون تخفیف و صد یعنی مبلغ نهایی صفر؛ هیچکدوم ورودی نامعتبر نیستن. خطای یک علامت مساوی میتونه همین دو حالت قانونی رو رد کنه، درحالیکه نمونه ده درصد همچنان درست جواب بده. برای همین فقط سبزشدن تست بازتولید اولیه کافی نیست.
مثال یک قانون ظرفیت رو با خود دو مرز میسنجه. کد پروژه شرط نامعتبر رو با <= و >= نوشته و باید اصلاح بشه. خطای رایج حذف کامل بررسی درصد برای قبولشدن صفر و صده؛ اون تغییر درصد منفی و بالای صد رو هم میپذیره و یک باگ تازه میسازه. شرط درست باید فقط بیرون بازه رو رد کنه. اعتبارسنجی پیش از محاسبه انجام میشه، حتی اگر سبد خالی باشه؛ خالیبودن فهرست مجوز تخفیف نامعتبر نیست. تابع کمکی inspect_invoice استثنای ValueError رو به داده قابل مقایسه تبدیل میکنه و باید همانطور باقی بمونه.
✍️ مثال حلشده:
def validate_capacity(value):
if value < 0 or value > 10:
raise ValueError("outside range")
return value
assert validate_capacity(0) == 0
assert validate_capacity(10) == 10
حالا نوبت توئه: discounted_total(prices, percent) را اصلاح کن: درصد 0 تا 100 شامل دو سر معتبر است و بیرون آن ValueError بدهد، حتی برای سبد خالی. [100,200] با 10=>270، با 0=>300 و با 100=>0؛ [] با 10=>0. inspect_invoice برای درصدهای -1 و 101 باید {"error":"ValueError"} و برای ورودی معتبر {"value":مبلغ} بدهد. قیمتها صحیح نامنفیاند. مبلغ تخفیف در این پروژه همان حاصل عددی فرمول است و گردکردن مالی انجام نمیشود؛ مثالهای آزمون عمداً نتیجه عددی دقیق دارند.
فعالیت شما
discounted_total(prices, percent) را اصلاح کن: درصد 0 تا 100 شامل دو سر معتبر است و بیرون آن ValueError بدهد، حتی برای سبد خالی. [100,200] با 10=>270، با 0=>300 و با 100=>0؛ [] با 10=>0. inspect_invoice برای درصدهای -1 و 101 باید {"error":"ValueError"} و برای ورودی معتبر {"value":مبلغ} بدهد. قیمتها صحیح نامنفیاند. مبلغ تخفیف در این پروژه همان حاصل عددی فرمول است و گردکردن مالی انجام نمیشود؛ مثالهای آزمون عمداً نتیجه عددی دقیق دارند.