قم بإنشاء اختبار JUnit لطريقة تغطي جميع استدعاءاتها في مساحة عمل Eclipse

StackOverflow https://stackoverflow.com//questions/11658056

  •  11-12-2019
  •  | 
  •  

سؤال

لنفترض اتباع فئة Java:

class MyClass {
   public String methodA( String data, String expression ) {
      // expression is evaluated using data
      // ...
      // this leads to a result which is returned
      return result;
   }
}

لاحظ أن expression هو مثال للغة التعبير (DSL).وهكذا يكون التقييم expression استخدام data يعتمد على مزيج من الاثنين معا.عادة، expression هي قيمة ثابتة لا تتغير كثيرًا و data يمكن أن تتغير في جميع الدعوات.

حسنا، في وقت لاحق تم العثور على خطأ في MyClass.methodA(String,String).يتواجد الخطأ في بعض الفئات الأساسية ويحدث فقط في مجموعة خاصة من expression و data.تتم كتابة اختبار JUnit بسهولة لهذه الحالة الخاصة ويمكن إصلاحه.

ولسوء الحظ، يتم استخدام هذه الطريقة بشكل متكرر عبر المشروع بأكمله.يحدد التسلسل الهرمي لاستدعاء Eclipse أكثر من 97 طريقة أخرى يتم فيها استخدام هذه الطريقة.أخشى الآن الانحدار، إذا قمت فقط بتطبيق تصحيح الأخطاء.لكي أشعر بمزيد من الأمان، أود إجراء بعض اختبارات الانحدار.

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

لذا فإن فكرتي هي المضي قدمًا بالطريقة التالية:

  1. ابحث عن جميع استدعاءات هذه الطريقة (مثل استخدام "التسلسل الهرمي للمكالمات" في Eclipse) واستخرج جميع القيم الخاصة expression.

  2. عينة كافية من القيم الواقعية data (على سبيل المثالمن قاعدة البيانات) وقم بتقييم جميع التعبيرات من الخطوة الأولى عليها باستخدام الإصدار الأصلي من MyClass.methodA(String,String).حفظ الثلاثيات (data, expression, result) إلى ملف.

  3. تنفيذ بوجفيكس.

  4. طريقة اختبار MyClass.methodA(String,String) باستخدام الملف أعلاه للتأكد من أن النتائج لم تتغير.

الأسئلة التالية:

ما رأيك في هذا النهج؟

باستخدام التسلسل الهرمي للمكالمات في Eclipse، يمكنني فقط نسخ ولصق طرق الاتصال ولكن ليس الاستدعاء الدقيق بما في ذلك الوسائط إلى الحافظة (راجع:الخطوة 1).سأضطر إلى نسخ مكالمة الاستدعاء يدويًا لكل طريقة تم العثور عليها.كيف يمكنني استخراج الاستدعاءات بطريقة مناسبة (في مساحة عمل Eclipse الكاملة، وبالتالي في العديد من المشاريع)؟

IMHO أنا أقوم باختبار طريقة واحدة فقط، وبالتالي فإن الاختبارات تغطي وحدة واحدة فقط.هل من المقبول استخدام JUnit للخطوة 4 أم أن هناك شيئًا أكثر تعقيدًا؟

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

المحلول

نظرًا لأن القيمة الإضافية المتوقعة من خلال اختبار برنامجك هي تغطية معظم الظروف بأقل التكاليف وأقصى قدر من النتائج، فأنا أتفق مع نهجك.

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

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