تكرار السؤال: …
الإجابة المختصرة
استخدم pytest.mark.parametrize لتشغيل نفس الاختبار على عدة مدخلات ونتائج متوقعة، فيظهر كل case كاختبار مستقل في التقرير.
الشرح
اختر الحالات لتغطي الحدود والحالات الفاشلة وليس أمثلة متشابهة فقط: الصفر والقيم السالبة والنص الفارغ والقيم الحدية. أعطِ كل حالة id واضحًا عبر pytest.param(..., id="...") حتى تكون رسالة الفشل مفهومة. وإذا كانت الحالات كثيرة جدًا أو عشوائية، فكّر في property-based testing بمكتبة Hypothesis.
مثال بالكود
import pytest
@pytest.mark.parametrize(
("raw", "expected"),
[
pytest.param("42", 42, id="simple"),
pytest.param(" 7 ", 7, id="whitespace"),
pytest.param("0", 0, id="zero"),
],
)
def test_parse_int(raw, expected):
assert parse_int(raw) == expected
def test_parse_int_rejects_text():
with pytest.raises(ValueError):
parse_int("abc")أخطاء شائعة
- كتابة حلقة for داخل اختبار واحد فيتوقف عند أول فشل ولا يظهر أي case فشل.
- اختيار حالات متشابهة لا تغطي الحدود.