أفضل طريقة لإعادة تعيين قاعدة البيانات إلى الحالة المعروفة بين اختبارات التكامل FlexUnit4؟

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

سؤال

خلفية:

لدي تطبيق Flex Web يتواصل مع خلفية Java عبر Blazeds. يتكون العميل Flex من وحدة Flex-Client ، التي تحمل طرق العرض ونماذج العرض ووحدة خدمة مرنة منفصلة تحمل النماذج (كائنات القيمة) وكائنات الخدمة.

أنا بصدد كتابة اختبارات التكامل غير المتزامن للما بعد مراعاة وحدة الخدمة المرنة باستخدام FlexUnit4. في بعض الاختبارات ، أقوم بتعديل بيانات الاختبار والاستعلام عنها مرة أخرى لمعرفة ما إذا كان كل شيء يعمل (تقنية موضحة هنا: http://saturnboy.com/2010/02/async-testing-with-flexunit4)

سؤال:

كيف يمكنني إعادة تعيين قاعدة البيانات إلى حالة معروفة قبل كل طريقة اختبار FlexUnit4 (أو سلسلة طريقة الاختبار)؟ في اختبارات تكامل خادم Java الخاصة بي ، قمت بذلك عبر مجموعة من معاملات DBUNIT و SPRING TEST - التي تراجع بعد كل طريقة اختبار. ولكن هذه التكامل المرن تمتد طلبات متعددة وبالتالي معاملات متعددة.

دون تطبيق واجهة برمجة تطبيقات خدمة اختبار التكامل على الواجهة الخلفية ، كيف يمكن تحقيق ذلك. من المؤكد أن الآخرين قد واجهوا هذا أيضًا؟ تم طرح أسئلة مماثلة من قبل ( قاعدة بيانات التراجع بعد اختبارات التكامل (السيلينيوم) ) ، ولكن مع عدم وجود إجابات مرضية.

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

المحلول

هناك العديد من الخيارات:

  1. إذا كنت تستخدم تسلسلات للمفاتيح الأولية: بعد تحميل قاعدة البيانات مع بيانات الاختبار ، احذف مولد التسلسل واستبداله بأخرى تبدأ -1 والعد التنازلي. بعد الاختبار ، يمكنك حذف الكائنات باستخدام مفتاح أساسي <0. يكسر الاختبارات التي تعدل البيانات الموجودة.

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

  2. استخدم قاعدة بيانات على الخادم والتي يمكن مسحها بسرعة (H2, ، علي سبيل المثال). أضف واجهة برمجة تطبيقات الخدمة التي يمكنك الاتصال بها من العميل لإعادة تعيين DB.

  3. أضف التراجع إلى تطبيق الويب الخاص بك. هذا جهد كبير ولكن ميزة رائعة جدا.

  4. استخدم قاعدة بيانات تسمح بالرجوع مرة أخرى في الوقت المناسب باستخدام أمر واحد ، مثل ملاحظات اللوتس.

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

    أو كتابة حالات الاختبار التي تعمل مقابل الخادم الحقيقي والتي تنشئ هذه الملفات. سيتيح لك ذلك تتبع الملفات التي تتغير عند تعديل الرمز على الخادم أو العميل.

    على الخادم ، اكتب اختبارات تتأكد من قيامها بإجراء تعديلات DB الصحيحة.

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

نصائح أخرى

اعتمادًا على حجم قاعدة بيانات الاختبار الخاصة بك ، يمكنك أتمتة النسخ الاحتياطية/الاستعادة النظيفة التي تمنحك البيئة الدقيقة التي كانت لديك في كل عملية اختبار.

لدي هذا النهج في مشاريعي الحالية (منصة مختلفة) ونختبر أيضًا مخطط البيانات النصوص مع نفس النهج.

أنا مجففة (عذري المفضل لقوائم قصيرة). آسف ، إذا كانت هذه الإجابة قريبة جدًا من استجابة "API لخدمة اختبار التكامل على الواجهة الخلفية" التي لم تكن تريدها.

اتخذ الفريق الذي أقام Flexunit "منذ زمن مضى" خيارات وخلق حلولًا بناءً على بنيةنا ، والتي لن ينطبق بعضها إلا على بنيتنا التحتية. الأشياء التي يجب مراعاتها: 1) جميع أساليب الواجهة الخلفية لدينا تعيد نفس الفصل الذي تم تحديده عن بُعد. 2) معظم أساليبنا لها طريقة مجردة تُخبر الطريقة (أو لا) بتشغيل "معاملة البداية" في بداية الطريقة و "معاملة الالتزام" في النهاية (غير متأكد من قطعة DB الخاصة بك) .

من المحتمل ألا يكون الأخير هو الحل الأكثر توجهاً للكائن ، ولكن إليك ما تقوم به مكالمة اختبار الوحدة غير المتزامنة: كل اختبار وحدة يستدعي نفس الطريقة ، ونحن نقوم بإجراء اسم الأسلوب/الحزمة ، بالإضافة إلى [[ ...] args. يتم تنفيذ بداية. تسمى هذه الطريقة ، تمرير خاطئ إلى طريقة اختبارات وحدة FE (لتجاهل خطوط BeginTransaction و MissingTransaction) ، يتم تشغيل كل شيء ويتم إنشاء فئة "الاستجابة" الرئيسية وإعادتها إلى طريقة اختبار الوحدة. يتم تشغيل DB-Rollback ويتم إرجاع الاستجابة إلى اختبار الوحدة.

تعتمد جميع اختبارات الوحدات لدينا على معاملات التراجع. لم أستطع إخبارك بالمشكلات التي كانت لديهم عند إعداد هذا Jive ، لكن هذا هو ما أفهمه العام لكيفية عمل Schtuff.

امل ان يساعد. مفهوم إذا لم يكن كذلك. حظا سعيدا ، -جيريمي

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