سؤال

لقد كنت أحاول تنفيذ اختبار الوحدة ولدي حاليًا بعض التعليمات البرمجية التي تقوم بما يلي:

  1. الاستعلام عن قاعدة بيانات خارجية ، التحميل في جدول التغذية
  2. الاستعلام عن طريقة عرض ، وهي دلتا من جداول الخلاص والبيانات ، وتحديث جدول البيانات لمطابقة جدول التغذية

استراتيجية اختبار الوحدة الخاصة بي هي:

لدي قاعدة بيانات اختبارية وأنا حر في التعامل معها.

  1. في setUP()، قم بتحميل بعض البيانات في قاعدة بيانات الاختبار الخاصة بي
  2. قم بتشغيل الكود الخاص بي باستخدام قاعدة بيانات الاختبار الخاصة بي كمصدر
  3. فحص جدول البيانات والتحقق من الأعداد ووجود/عدم وجود سجلات معينة
  4. اختبار واضح لقاعدة البيانات، وتحميل مجموعة مختلفة من البيانات
  5. تشغيل التعليمات البرمجية مرة أخرى
  6. فحص جدول البيانات مرة أخرى

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

يبدو أن هذا مرهق بعض الشيء ويجب أن تكون هناك طريقة أسهل؟أي اقتراحات؟

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

المحلول

هل تنوي اختبار العرض الذي يُنشئ الدلتا، أو اختبار ما إذا كان الكود الخاص بك يضيف ويحذف ويحدث بشكل صحيح استجابةً للعرض؟

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

إذا كنت تريد اختبار كيفية استجابة التعليمات البرمجية الخاصة بك للاختلافات التي اكتشفها العرض، فسأحاول تجريد الوصول إلى قاعدة البيانات.أتخيل طريقة جافا يمكنك من خلالها تمرير مجموعة نتائج (أو قائمة POJO/DTO) وإرجاع قائمة بمصفوفات كائنات المعلمة (مرة أخرى، أو POJO) المراد إضافتها.قد تقوم الطرق الأخرى بتحليل قائمة الفرق للعناصر المراد إزالتها وتحديثها.يمكنك بعد ذلك إنشاء مجموعة نتائج وهمية أو مجموعة نتائج pojo، وتمريرها إلى الكود الخاص بك والتحقق من إرجاع المعلمات الصحيحة.كل ذلك دون لمس قاعدة البيانات.

أعتقد أن المفتاح هو تقسيم عمليتك إلى أجزاء واختبار كل منها بشكل مستقل قدر الإمكان.

نصائح أخرى

DbUnit سوف تلبي احتياجاتك.شيء واحد يجب الانتباه إليه هو أنهم تحولوا إلى استخدام SLF4J كواجهة تسجيل خاصة بهم بدلاً من JCL.يمكنك تكوين SLF4J لإعادة توجيه التسجيل إلى JCL ولكن كن حذرًا إذا كنت تستخدم Maven DbUnit تمتص موفر سجل Nop الخاص بهم بشكل افتراضي لذا سيتعين عليك استخدام الاستثناء، أنا مدون حول هذا الصراع مؤخرا.

أستخدم DbUnit، ولكني أيضًا أعمل بجد حتى لا أضطر إلى الاختبار مقابل قاعدة البيانات.يجب أن تكون الاختبارات التي تتعارض مع قاعدة البيانات موجودة فقط لغرض اختبار واجهة قاعدة البيانات.لذلك لدي Mock Db Connections حتى أتمكن من تعيين البيانات لاستخدامها في جميع اختباراتي المتبقية.

وبصرف النظر عن DBUnit المقترحة بالفعل، قد ترغب في النظر فيها الوحدات.يستخدم DBUnit، ولكنه يوفر أكثر من ذلك (نقلا عن الموقع):

  • الصيانة التلقائية لقواعد البيانات ، بدعم من البرامج النصية الإضافية والقابلة للتكرار وما بعد المعالجة
  • قم بتعطيل القيود تلقائيًا وضبط التسلسلات على الحد الأدنى من القيمة
  • دعم Oracle وHsqldb وMySql وDB2 وPostgresql وMsSql وDerby
  • تبسيط إعداد اتصال قاعدة بيانات الاختبار
  • إدخال بسيط لبيانات الاختبار باستخدام DBUnit * تشغيل الاختبارات في المعاملة
  • إنشاء مدير كيان JPA وحقنه من أجل إنشاء وجلسة وجلسة السلب
  • اختبار تلقائيا رسم خرائط كيانات JPA / الكائنات المعينة مع قاعدة البيانات مع قاعدة البيانات

إذا كنت تستخدم Maven، فأحد الخيارات هو استخدام sql-maven-plugin.يسمح لك بتشغيل البرامج النصية لتهيئة/تجميع قاعدة البيانات أثناء دورة البناء المخضرم.

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