我试图使用的DbUnit 来测试我们的一些数据库访问代码和我快到一个问题。我们使用 MySQL的5 或其他东西作为数据库本身。我出口一个小数据集到 FlatXmlDataSet 当我设置测试的情况下,它抛出异常,其表示“数据被截断为列‘FHEIGHT_FLAG’在行1”。列FHEIGHT_FLAG被定义为

enum('t','f') default NULL

枚举的数据被插入到所述的方式数据库中,如果对数据源的实际值是不正确的,则列实际上包含“”(空字符串)。使用数据库的代码只是使假设,如果从数据库中提供的值不是“T”的话,那肯定是假的。我怎样才能让这个去?我不能修复的源数据,所以我要努力做的测试案例的东西。

有帮助吗?

解决方案

导出新的数据集,使用"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

这方式,所有的空字符串值的被允许被插回。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top