سؤال

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

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

المحلول

المعاملات.

ما يفعله إطار اختبار وحدة Ruby on Rails هو:

Load all fixture data.

For each test:

  BEGIN TRANSACTION

    # Yield control to user code

  ROLLBACK TRANSACTION

End for each

هذا يعني ذاك

  1. لن تؤثر أي تغييرات يجريها الاختبار على قاعدة البيانات على سلاسل الرسائل الأخرى أثناء تقدمه
  2. لا تتلوث بيانات الاختبار التالي بالاختبارات السابقة
  3. وهذا أسرع بنحو زليون مرة من إعادة تحميل البيانات يدويًا لكل اختبار.

أعتقد أن هذا رائع جدًا

نصائح أخرى

بالنسبة لتطبيقات قواعد البيانات البسيطة أجد استخدام سكليتي لا يقدر بثمن.يتيح لك الحصول على قاعدة بيانات فريدة ومستقلة لكل اختبار.

ومع ذلك، فهو لا يعمل إلا إذا كنت تستخدم وظيفة SQL عامة بسيطة أو يمكنك بسهولة إخفاء الاختلافات الطفيفة بين SQLite ونظام قاعدة بيانات الإنتاج الخاص بك خلف فئة ما، ولكنني وجدت دائمًا أن ذلك سهل إلى حد ما في تطبيقات SQL التي استخدمتها متطور.

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

كنت أرغب في قبول إجابات كل من Free Wildebeest وOrion Edwards، لكن ذلك لم يسمح لي بذلك.السبب وراء رغبتي في القيام بذلك هو أنني توصلت إلى استنتاج مفاده أن هاتين الطريقتين الرئيسيتين للقيام بذلك، ولكن أيهما تختار يعتمد على الحالة الفردية (في الغالب حجم قاعدة البيانات).

قم أيضًا بإجراء الاختبارات في أوقات مختلفة، بحيث لا تؤثر على أداء أو صلاحية بعضها البعض.

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

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

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