سؤال

أنا في الغالب في Scala و Java ، باستخدام Scalatest في Scala و Junit لاختبار الوحدة. أرغب في تطبيق نفس الاختبارات على عدة تطبيقات من نفس الواجهة/السمة. تتمثل الفكرة في التحقق من أن عقد الواجهة يتم إنفاذه والتحقق من مبدأ استبدال Liskov.

على سبيل المثال ، عند اختبار تطبيقات القوائم ، يمكن أن تشمل الاختبارات:

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

ما هي أفضل الممارسات ؟

هل كانت مفيدة؟

المحلول

هذا يبدو أنه يمكن أن يكون وظيفة للاختبارات المشتركة. الاختبارات المشتركة هي اختبارات مشتركة بواسطة كائنات تجهيزات مختلفة. أي ، يتم تشغيل رمز الاختبار نفسه على بيانات مختلفة. Scalatest لديها دعم لذلك. ابحث عن "الاختبارات المشتركة" في توثيق سمة الأسلوب المفضلة لديك التي تمثل الاختبارات كوظائف (Spec ، WordsPec ، Funsuite ، Flatspec ، إلخ). مثال على ذلك بناء الجملة لـ Flatspec:

it should behave like emptyList

يرى اختبارات مشاركة في ال FlatSpec توثيق

نصائح أخرى

في Java/Junit ، أتعامل مع هذا عمومًا من خلال الحصول على اختبار تجريدي يتم من خلال اختبارات فئة الاختبار المحددة أن ترث جميع الاختبارات ولديها طريقة الإعداد لتأسيس التنفيذ. لا يمكنني مشاهدة الفيديو الذي ينشره Abyx الآن ، لكنني أظن أنها هذه الفكرة العامة.

احتمال آخر مثير للاهتمام إذا كنت لا تمانع في تقديم إطار اختبار آخر هو الاستخدام jdave فئات المواصفات.

لم أحاول استخدام أي منهما مع Scalatest أو Scala Traits والتطبيقات ، ولكن يجب أن يكون من الممكن القيام بشيء مماثل.

اختبارات العقد سهلة مع Junit 4 ، هنافيديو SA بقلم بن رادي.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top