تكرار السؤال: …
الإجابة المختصرة
استخدم pytest.raises (أو assertRaises في unittest) كمدير سياق حول السطر المتوقع فشله فقط، مع فحص النوع والحقول المهمة أو جزء من الرسالة عبر match.
الشرح
اجعل كتلة raises تحيط بالسطر الذي يجب أن يفشل فقط، حتى لا ينجح الاختبار بسبب استثناء من سطر تهيئة آخر. افحص الحد الأدنى من العقد: نوع الاستثناء والحقول المنظمة أفضل من مطابقة الرسالة كاملة، لأن الصياغة تتغير. يقبل match تعبيرًا نمطيًا، فاستخدم re.escape إذا احتوت الرسالة على رموز خاصة.
مثال بالكود
import pytest
def test_withdraw_more_than_balance():
account = Account(balance=10)
with pytest.raises(InsufficientFunds, match="balance") as exc_info:
account.withdraw(50)
assert exc_info.value.missing == 40أخطاء شائعة
- وضع الاختبار كله داخل pytest.raises فينجح بسبب خطأ غير متوقع.
- مطابقة نص الرسالة بالكامل فيفشل الاختبار عند أي تعديل لغوي.