اختبار API / أساسي: ملاحظات واجهة موثوقة / الدرس 4
كتابة تأكيدات تشرح الوعد الذي فشل
اختيار المقارنات الدقيقة والجزئية والمرتبة وغير المرتبة عن قصد بدلا من تصوير كل شيء.
في هذه الصفحة
أهداف الدرس
- مطابقة قوة المقارنة مع دلالات الاستجابة الموثقة.
- إنتاج دليل فشل مركز دون إخفاء العيوب بالتوحيد.
تحديد معنى المساواة
المساواة قرار تصميم في اختبار الواجهة. يطابق معرف الكتاب عادة بصورة دقيقة، بينما تقارن مجموعة موثقة غير مرتبة دون اعتبار الترتيب. تحتاج نقطة نهاية مرتبة إلى تأكيد ترتيب وقاعدة فصل عند التعادل. وقد تتطلب الحقول الاختيارية مقارنة جزئية، لكن الجزئية لا تعني التساهل في القيم المطلوبة. اكتب قاعدة المقارنة بجانب العقد ليفهم المراجع أهمية الاختلاف. لا تكون مساواة الجسم كله مفيدة إلا إذا كانت كل حقوله ثابتة عن قصد؛ وإلا أصبحت تغييرات العرض البسيطة مصدرا للفشل المشتت.
حفظ التعدد عندما لا يهم الترتيب
يمكن للفرز أو المجموعة متعددة العناصر التعبير عن مساواة غير مرتبة مع حفظ عدد التكرارات. أما التحويل إلى set فيزيل التعدد وقد يخفي المدخلات المكررة. يحتوي الرصد الأول على القيم الصحيحة بترتيب مختلف، ويكرر الرصد الثاني معرفا. يحافظ Counter على الفرق. تأكد أولا أن العقد يسمح بترتيب عشوائي؛ فإذا وعد بالترتيب الأبجدي فإن المقارنة غير المرتبة تخفي مخالفة حقيقية. يقيم البرنامج قوائم محلية ولا يسترجع أي بيانات.
from collections import Counter
expected = ["book-2", "book-4"]
reordered = ["book-4", "book-2"]
duplicated = ["book-2", "book-4", "book-4"]
assert Counter(expected) == Counter(reordered)
assert Counter(expected) != Counter(duplicated)
print("unordered multiplicity checked")
unordered multiplicity checked
يفحص المثال الكامل مساواة المجموعات المتعددة لمعرفات نصية قابلة للتجزئة. لا يتحقق من كائنات الكتب أو فرز الخادم. استخدم إسقاطا يراعي الحقول وفحص التعادل عندما يتطلب العقد ذلك.
تقييد الحقول المتغيرة بدلا من حذفها
تحتاج المعرفات والأوقات المولدة إلى تأكيدات مفيدة رغم تغير قيمها. التقط المعرف وافحص شكله الموثق واستخدمه لفحص العلاقات اللاحقة. وللوقت احقن ساعة إن أمكن، أو افحص فترة موثقة مع معالجة المنطقة الزمنية صراحة. قد يزيل حذف كل الحقول المتغيرة الدليل الوحيد الذي يربط الاستجابة بالحالة. يستخدم المثال الثاني ساعة صحيحة محقونة لقاعدة انتهاء خيالية. الحساب نموذج سياسة، ولا يختبر دقة الساعة الفعلية أو انحرافها أو تحليل المناطق الزمنية أو التخزين.
def expiry(now, lifetime):
return {"issuedAt": now, "expiresAt": now + lifetime}
observed = expiry(1000, 30)
assert observed["issuedAt"] == 1000
assert observed["expiresAt"] - observed["issuedAt"] == 30
assert observed["expiresAt"] > observed["issuedAt"]
print("expiry relation accepted")
expiry relation accepted
يفحص البرنامج عمرا دقيقا من ثلاثين وحدة بساعة مضبوطة. الوحدات جزء من العقد الخيالي. لا ينشئ بيانات اعتماد أو رمزا حقيقيا، ولا يقدم دليلا عن انتهاء التوثيق.
جعل الفشل محددا ومقروءا
فضل التأكيدات المسماة التي تحدد الخاصية المخالفة على تعبير منطقي ضخم. إذا فحصت المالك والعدد والترتيب معا، فيجب أن يبين الفشل أيها اختلف. أدرج أقل قيمة فعلية منقحة واسم حالة ثابتا. قد تفيد اللقطة المرجعية لتمثيل تمت مراجعته، لكن تحديثها آليا يحول السلوك غير المتوقع إلى توقع جديد. راجع الفرق الدلالي أولا. لا تضع الترويسات الحساسة أو السجلات الخاصة أو بيانات الاعتماد في رسائل التأكيد لمجرد سهولة التشخيص.
فحص قدرة التأكيد على كشف العيب
قد لا يملك الاختبار قدرة تمييز مفيدة إذا قبل الملاحظة الصحيحة وملاحظة خاطئة متعمدة. غير حقلا مختلقا أو احذف عنصرا مطلوبا أو أضف تكرارا وتحقق أن المقارنة ترفضه. هذه مراجعة محلية لمعيار الحكم وليست إذنا بتعديل خدمة حية. تجنب تفاصيل التنفيذ التي لا يتطلبها العقد، مثل عدد استدعاءات مساعد داخلي، إلا إذا كان التفاعل نفسه هو الحد المختبر. تتسم التأكيدات القوية بالدقة في الوعود الخارجية والوضوح بشأن الأجزاء الداخلية غير المرصودة.
الأخطاء الشائعة وإصلاحها
يمر مدخل مكرر من مقارنة غير مرتبة
- لماذا يحدث؟
- تزيل مقارنة set عدد التكرارات.
- كيف تصلحه؟
- استخدم مجموعة متعددة أو قارن العدد والعضوية منفصلين.
- كيف تتجنب تكراره؟
- أدرج بيانات مكررة عند مراجعة تأكيدات المجموعات.
تحذف كل الأوقات قبل المقارنة
- لماذا يحدث؟
- يزيل التوحيد متطلب مدة الصلاحية.
- كيف تصلحه؟
- احقن ساعة وأكد العلاقة الزمنية المطلوبة.
- كيف تتجنب تكراره؟
- راجع كل حقل مهمل مقابل التزامات العمل.
تحدث اللقطة المرجعية دون تحقيق
- لماذا يحدث؟
- يعتبر المخرج المرصود سلوكا معتمدا.
- كيف تصلحه؟
- فسر الفرق الدلالي وراجع العقد قبل قبوله.
- كيف تتجنب تكراره؟
- اشترط مراجعة فعلية لتحديث المرجع.
اختبر فهمك
1. تعد الواجهة بالفرز حسب العنوان ثم id. هل تكفي مجموعة المعرفات؟
اعرض الحل المشروح
لا. افحص العضوية والتعدد، ثم قارن التسلسل بقاعدة العنوان والمعرف. أدرج كتابين بعنوان واحد لاختبار فض التعادل. لا تكشف عناوين مختلفة فقط غياب الفرز الثانوي.
2. لا يعرف معرف المدخل المولد قبل الإنشاء. كيف يبقى الاختبار دقيقا؟
اعرض الحل المشروح
افحص تمثيل المعرف الموثق والتقط قيمته، ثم اشترط استخدام القيمة نفسها في الحالة الناتجة أو بيانات المتابعة. ارفض المعرف المفقود أو الفارغ أيضا. بذلك تحافظ على العلاقة دون اختلاق معرف ثابت لحقل مولد.
أهم ما تعلمته
- اختر المساواة حسب الدلالات الموثقة.
- يجب أن يحفظ التوحيد الخاصية المختبرة.
- راجع رفض التأكيد لملاحظة خاطئة عمدا.