اختبار الربيع/السبات: إدراج بيانات الاختبار بعد إنشاء DDL

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

سؤال

لديّ WebApp Spring/Hibernate يحتوي على بعض اختبارات التكامل التي تعمل على قاعدة بيانات HSQL في الذاكرة. يأخذ Hibernate قاعدة البيانات الفارغة هذه وإنشاء جميع جداول الاختبار والقيود بفضل HBM2DDL = إنشاء. ومع ذلك ، لدي حبة جديدة تتحقق من قيمة تكوين معينة من قاعدة البيانات أثناء طريقة ما بعد propertiesset () ، وهكذا عند تهيئة هذه الفاصوليا ، يجب أن يكون هذا الصف موجودًا في قاعدة البيانات.

هل هناك أي طريقة جيدة لإعداد ما يعادل Java/Spring/Hibernate لتركيبات اختبار السكك الحديدية؟ أحاول إيجاد طريقة لإخبار السبات "كلما قمت بإنشاء هذا الجدول ، أدخل هذه الصفوف بعد ذلك مباشرة". لم أتمكن من العثور على رد اتصال أو خطاف يمكنني إضافته ، لكن ربما هناك طريقة أخرى.

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

المحلول

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

منذ Hibernate 3.1 ، يمكنك تضمين ملف يسمى import.sql في وقت تشغيل Classpath of Hibernate وفي وقت تصدير المخطط ، ستقوم Hibernate بتنفيذ عبارات SQL الواردة في هذا الملف بعد تصدير المخطط.

تم الإعلان عن هذه الميزة في Rotterdam Jbug و Hibernate's Import.SQL مشاركة مدونة:

import.SQL: استيراد البيانات بسهولة في اختبارات وحدتك

يحتوي Hibernate على ميزة صغيرة أنيقة غير موثقة بشكل كبير وغير معروفة. يمكنك تنفيذ برنامج نصي SQL أثناء SessionFactory إنشاء مباشرة بعد توليد مخطط قاعدة البيانات لاستيراد البيانات في قاعدة بيانات جديدة. تحتاج فقط إلى إضافة ملف اسمه import.sql في جذر classpath الخاص بك وضبطه أيضًا create أو create-drop مثلك hibernate.hbm2ddl.auto منشأه.

أستخدمه للبحث عن السبات في العمل الآن بعد أن بدأت فصل الاستعلام. تقوم بتهيئة قاعدة البيانات الخاصة بي مع مجموعة جديدة من البيانات لاختبارات وحدتي. يستخدم JBoss Seam أيضًا كثيرًا في أمثلة مختلفة. import.sql هي ميزة بسيطة للغاية ولكنها مفيدة للغاية في الوقت المناسب. تذكر أن SQL قد تعتمد على قاعدة البيانات الخاصة بك (قابلية النقل!).

#import.sql file
delete from PRODUCTS
insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) values ('1', '630522577X', 'My Fair Lady', 19.98, '630522577X.jpg', 'My Fair blah blah...');
insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) values ('2', 'B00003CXCD', 'Roman Holiday ', 12.98, 'B00003CXCD.jpg', 'We could argue that blah blah');

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

لا يزال غير موثق حقًا.

نصائح أخرى

في Hibernate 3.6 التكوين الذي يسمح بتشغيل أوامر SQL التعسفية هو:

hibernate.hbm2ddl.import_files

أرى في http://docs.jboss.org/hibernate/core/3.6/reference/en-us/html_single/, ، لاحظ أن هناك خطأ في الوثائق: الخاصية هي Import_files ، مع S في النهاية.

إذا كنت تتحدث عن اختبارات Junit واستخدامها AbstractTransactionaldatasourcespringContextTests هناك طرق يمكنك تجاوزها مثل onsetupbebeforetransaction التي توفر خطافًا لبيانات جدول الاختبار قبل تعقيدها وما إلى ذلك.

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