كيف يمكنني الحصول على dbunit للعب لطيفة مع أنواع بيانات التعداد الخلية؟
سؤال
وأنا أحاول أن استخدام dbunit لاختبار بعض لدينا رمز وصول قاعدة البيانات وأنا على التوالي في مشكلة. نحن نستخدم الخلية 5 شيء أو غيرها مثل قاعدة البيانات نفسها. صدرت لي مجموعة صغيرة من البيانات إلى FlatXmlDataSet وعندما الإعداد حالة اختبار، فإنه يلقي استثناء التي تقول "اقتطاع بيانات العمود 'FHEIGHT_FLAG' في الصف 1". يتم تعريف FHEIGHT_FLAG العمود ك
enum('t','f') default NULL
والطريقة التي يتم إدخال البيانات التعداد للل قاعدة البيانات، إذا كانت قيمة حقيقية للمصدر البيانات غير صحيح، ثم العمود يحتوي في الواقع "" (سلسلة فارغة). الشفرة باستخدام قاعدة البيانات هو مجرد جعل افتراض أنه إذا كانت القيمة المقدمة من قاعدة البيانات ليست 'ر'، ثم يجب أن تكون كاذبة. كيف يمكنني جعل هذه تذهب؟ لا أستطيع تحديد مصدر البيانات، لذلك يجب أن تحاول أن تفعل شيئا مع حالة اختبار.
المحلول
وتصدير مجموعة بيانات جديدة، وذلك باستخدام "select case when FHEIGHT_FLAG = 't' then 't' else 'f' end as FHEIGHT_FLAG, ....(all other columns) .... from tablename";
(ولكن تأمر الأعمدة كما هي في الجدول الحقيقي، بالطبع).
final String select = "select case when FHEIGHT_FLAG = 't' then 't' else 'f' end as FHEIGHT_FLAG, ....(all other columns) .... from tablename";
// database connection
Class driverClass = Class.forName("package.of.jdbcDriver");
Connection jdbcConnection = DriverManager.getConnection(
"jdbc:url:of:db", "user", "pass");
IDatabaseConnection connection = new DatabaseConnection(jdbcConnection);
// partial database export
QueryDataSet partialDataSet = new QueryDataSet(connection);
partialDataSet.addTable("Tablename", select);
FlatXmlDataSet.write(partialDataSet, new FileOutputStream("mydataset.xml"));
نصائح أخرى
وانتهى بي الأمر تعديل العمود اختبار قاعدة بيانات FHEIGHT_FLAG أن يكون
enum('','t','f') default NULL
وبهذه الطريقة تم السماح كافة القيم سلسلة فارغة لإدراجها الظهر.