تنفيذ البرنامج النصي SQL باستخدام اختبار الربيع يرتكب تغييرات

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

سؤال

أحاول تنفيذ برنامج نصي SQL في اختبار Junit الخاص بي باستخدام الربيع. يستخدم البرنامج النصي لإعداد بيانات الاختبارات. ومع ذلك، عندما يتم تشغيل البرنامج النصي، يتم الالتزام بالإدراجات في البرنامج النصي بعد كل اختبار. تقول وثائق الربيع عدم توقع التراجع مع DDL، ولكن كل شيء في البرنامج النصي الخاص بي هو DML. كل ما يحتوي عليه هو إدراج عبارات والحصول على معرف إدراج آخر (setblah= last_insert_id ()).

هل أقوم بتكوين شيء خاطئ؟ أنا أستخدم هذا مقابل قاعدة بيانات MySQL. التكوين لدينا هو كما يلي:

giveacodicetagpre.

هنا هو ما أعتقد أنه يحدث بناء على بعض الأبحاث. تتم تشغيل الدعوة الأولى ل ExecutesQLScript في معاملة منفصلة. تسمى طريقة Spring's Simplejdbctemplate.update بواسطة Executesqlscript. نظرا لأن هذا مفجحة إلى اتصال JDBC، والذي يتم الحصول عليه من تجمع اتصال، لا أكون مضمونا للحصول على نفس الاتصال في الوصول اللاحق إلى DB وبالتالي لا يمكن ضمان التشغيل في نفس المعاملة.

إذا كنت أفعل كل عمليات DB الخاصة بي من خلال TransactionManager أو (مصنع جلسة السبات) ثم سيعمل بسبب كيفية النطاق الدوليين المعاملات. خياراتي هنا هي:

  1. تعرف كيفية تشغيل simplejdbctemplate.update والرمز الفعلي اللاحق الذي يمكنني الاختبار في نفس المعاملة. أعتقد أنني ربما أفعل ذلك، لكن جهدي حتى الآن كانت غير مثمرة.

  2. قم بإعداد جميع بيانات الاختبار الخاصة بي خلال الدورة. لذلك، بدلا من تنفيذ البرامج النصية المستقيمة SQL من خلال JDBC، سأكون ملء الكائنات النموذجية وتستمسها من خلال DAO السبات.

  3. هل أنا على المسار الصحيح هنا؟ هل يمكن لأي شخص تقديم أي إرشادات أخرى؟

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

المحلول 2

كنت قادرا على حل هذا عن طريق إضافة "jpavendoraDapter" التالية لإعلان كائناتي.

giveacodicetagpre.

نصائح أخرى

ربما تكون قد تم تمكين الالتزام التلقائي على اتصال DB.

giveacodicetagpre.

لاحظ أنه قد تمر أيضا بمرور هذه الوسيطة في عنوان URL JDBC.

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