Comment puis-je DbUnit jouer agréable avec MySQL types de données ENUM?
Question
Je suis en train d'utiliser pour tester un code d'accès à notre base de données DBUnit et je suis en cours d'exécution en un problème. Nous utilisons MySQL 5 quelque chose ou autre que la base de données elle-même. J'ai exporté un petit ensemble de données à un FlatXmlDataSet et quand je configurer le cas de test, il lance une exception qui dit « les données tronquées dans la colonne « FHEIGHT_FLAG » à la ligne 1 ». Le FHEIGHT_FLAG de colonne est définie comme
enum('t','f') default NULL
La façon dont les données enum est inséré à la base de données, si la valeur réelle de la source des données est pas vrai, la colonne contient en fait « » (chaîne vide). Le code en utilisant la base de données est juste faire l'hypothèse que si la valeur fournie par la base de données ne sont pas « t », alors il doit être faux. Comment puis-je faire passer ça? Je ne peux pas fixer les données sources, donc je dois essayer de faire quelque chose avec le cas de test.
La solution
Exporter un nouvel ensemble de données, en utilisant "select case when FHEIGHT_FLAG = 't' then 't' else 'f' end as FHEIGHT_FLAG, ....(all other columns) .... from tablename";
(Mais l'ordre des colonnes comme dans la table réelle, bien sûr.)
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"));
Autres conseils
I fini par la modification de la base de données test de colonne FHEIGHT_FLAG être
enum('','t','f') default NULL
de cette façon toutes les valeurs de chaîne vides ont été autorisés à être réinséré.