Wie werde ich DBUnit mit MySQL Enum-Datentypen schön zu spielen?
Frage
Ich versuche DBUnit zu verwenden, um einige unserer Datenbank Zugangscode zu testen, und ich laufe in ein Problem. Wir verwenden MySQL 5 etwas oder andere als die Datenbank selbst. Ich exportiert einen kleinen Satz von Daten zu einem FlatXmlDataSet und wenn ich ein Setup des Testfall, wirft es eine Ausnahme, die besagt, „Daten abgeschnitten für Spalte‚FHEIGHT_FLAG‘in Zeile 1“. Die Säule FHEIGHT_FLAG ist definiert als
enum('t','f') default NULL
Die Art und Weise der enum Daten an die eingefügt wird Datenbank, wenn der tatsächliche Wert für die Quelle der Daten nicht wahr ist, dann ist die Spalte enthält tatsächlich „“ (leere Zeichenkette). Der Code der Datenbank mit macht nur die Annahme, dass, wenn der Wert aus der Datenbank zur Verfügung gestellt nicht ‚t‘ ist, dann ist es falsch sein muss. Wie kann ich diese gehen machen? Ich kann die Quelldaten nicht reparieren, also muss ich versuchen, etwas mit dem Testfall zu tun.
Lösung
einen neuen Datensatz exportieren, "select case when FHEIGHT_FLAG = 't' then 't' else 'f' end as FHEIGHT_FLAG, ....(all other columns) .... from tablename";
mit
(Aber die Spalten bestellen, wie sie in der realen Tabelle sind, natürlich.)
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"));
Andere Tipps
Ich landete die Testdatenbank FHEIGHT_FLAG Spalte modifiziert sein
enum('','t','f') default NULL
auf diese Weise alle leeren String-Werte durften wieder eingefügt werden.