شعار ConstructiCat
CodeBust.
تصفح القسم ▾

روائح الاختبارات.

مشكلات متكررة في كود الاختبارات: كيفية التعرف عليها، وأسباب ضررها، وطرق إصلاحها، وقواعد التحليل الساكن التي تكشفها.

تميمة إعادة الهيكلة
روليت التحقق

يجمع اختبار واحد العديد من التحققات (assertions) غير الموثقة في طريقة واحدة، بحيث عندما يفشل لا يمكنك تحديد أي من التحققات قد فشل أو لماذا - مما يضطرك للمقامرة لمعرفة ذلك.

001
تميمة الأنماط المضادة
الاختبار المتلهف

يتحقق الاختبار المتلهف من عدة طرق أو سلوكيات متميزة للوحدة الخاضعة للاختبار في طريقة اختبار واحدة، بدلاً من التركيز على سلوك واحد.

002
تميمة أنماط التصميم
التأكيد الزائد

التأكيد الزائد هو تأكيد يقارن قيمة بنفسها أو بقيمة حرفية مساوية لها بالبناء، فتكون نتيجته محددة مسبقاً ولا يمكنه أن يفشل أو يكتشف انحداراً.

003
تميمة الأنماط المعمارية
الاختبار المجهول

طريقة اختبار تقوم بتشغيل الكود ولكنها لا تحتوي على أي تحقق (assertion)، وبالتالي تنجح طالما لم يتم إلقاء أي استثناء — مما يترك الغرض الفعلي منها وما تتحقق منه مجهولاً.

004
تميمة أنماط التصميم
التحقق المكرر

تتحقق طريقة اختبار واحدة من نفس الشرط أكثر من مرة — بتكرار تحقق متطابق أو إعادة فحص منطق مكافئ — بدلاً من إزالة الفحص الزائد عن الحاجة أو تقسيم الحالات المتميزة إلى اختبارات مركزة خاصة بها.

005
تميمة الأنماط المعمارية
المساواة الحساسة

يقوم الاختبار بالتحقق من السلوك من خلال مقارنة التمثيل النصي للكائن (toString()، أو JSON.stringify()، أو HTML المصيّر) بسلسلة نصية حرفية متوقعة، مما يربط الاختبار بتنسيقات عرضية بدلاً من القيم المهمة بالفعل.

006
تميمة الأنماط المضادة
الاختبار الغامض

الاختبار الغامض هو اختبار لا يمكن للقارئ أن يحدد من خلال طريقة الاختبار بمفردها ما هو السيناريو المجهز، وما هو السلوك الذي تم تشغيله، وما هي النتيجة المتوقعة — لأن الغرض مدفون في الكثير من التفاصيل، أو قلة السياق، أو منطق مخفي في مكان آخر.

011
تميمة إعادة الهيكلة
منطق الاختبار الشرطي

اختبار يستخدم `if`/`switch`/ternaries أو الحلقات أو `try`/`catch` لتحديد ما سيتم تشغيله أو التحقق منه، بحيث يعتمد سلوكه — وما إذا كان يتحقق من أي شيء على الإطلاق — على الفرع الذي يتم تنفيذه في وقت التشغيل.

012
تميمة الأنماط المضادة
تكرار كود الاختبار

يحدث تكرار كود الاختبار عندما يتم نسخ ولصق نفس كود الإعداد (setup) أو الإجراء (action) أو التحقق (assertion) عبر اختبارات متعددة، مما يعني أن تغييراً واحداً يفرض تعديلات في أماكن عديدة وتتحول الاختبارات إلى نسخ هشة متطابقة تقريباً.

013
تميمة الأنماط المضادة
اختبار الأرقام السحرية

يكتب الاختبار قيماً رقمية ثابتة غير مفسرة في مدخلاته وتحققاته، مما يخفي معنى الأرقام ومصدرها.

014
تميمة الأنماط المعمارية
الاختبار المسهب

اختبار يستخدم كوداً أكثر بكثير مما يحتاجه لتوضيح السيناريو الخاص به، مما يدفن علاقة السبب والنتيجة التي يتحقق منها تحت أكواد الإعداد الجاهزة (boilerplate)، والبيانات غير ذات الصلة، والتحققات لكل حقل على حدة.

015
تميمة إعادة الهيكلة
الاختبار غير المستقر (المتقلب)

ينجح الاختبار غير المستقر (المتقلب) ويفشل بشكل متقطع على نفس الكود لأن نتيجته تعتمد على التوقيت أو التترتيب أو الحالة المشتركة أو غيرها من العوامل غير الحتمية بدلاً من السلوك قيد الاختبار.

016
تميمة الأنماط المعمارية
الاختبار النائم

يقوم الاختبار النائم بإيقاف التنفيذ مؤقتاً باستخدام تأخير ثابت مشفر (`Thread.sleep`، أو `setTimeout`، أو `cy.wait(2000)`، أو `page.waitForTimeout`) لانتظار انتهاء العمل غير المتزامن بدلاً من انتظار الشرط الفعلي نفسه.

017
تميمة روائح الكود
حرب تشغيل الاختبارات

تحدث حرب تشغيل الاختبارات (Test Run War) عندما تنجح الاختبارات لشخص واحد ولكنها تفشل عشوائياً بمجرد قيام عدة أشخاص أو مهام تكامل مستمر (CI) بتشغيل مجموعة الاختبارات في نفس الوقت، وذلك بسبب تصادم الاختبارات على هيكل اختبار مشترك ومستمر.

018
تميمة الأنماط المضادة
الاعتماد على ترتيب الاختبارات

ينجح الاختبار أو يفشل اعتماداً على الاختبارات الأخرى التي تم تشغيلها قبله، وذلك لأن الاختبارات تسرب البيانات وتعتمد على حالة مشتركة قابلة للتغيير بدلاً من قيام كل اختبار بإعداد وتفكيك هيكل الاختبار الخاص به بشكل مستقل.

019