1

我正在尝试使用dbunit测试我们的一些数据库访问代码,但遇到了问题。我们使用MySQL 5或其他东西作为数据库本身。我将一小组数据导出到FlatXmlDataSet,当我设置测试用例时,它会抛出一个异常,上面写着“第 1 行的列 'FHEIGHT_FLAG' 的数据被截断”。FHEIGHT_FLAG 列定义为

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

枚举数据插入数据库的方式,如果数据源的真实值不为真,那么该列实际上包含“”(空字符串)。使用数据库的代码只是假设如果从数据库提供的值不是't',那么它一定是假的。我怎样才能做到这一点?我无法修复源数据,所以我必须尝试对测试用例做一些事情。

4

2 回答 2

2

导出一个新数据集,使用"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"));
于 2009-04-02T08:33:43.850 回答
0

我最终将测试数据库 FHEIGHT_FLAG 列修改为

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

这样所有的空字符串值都被允许插入回来。

于 2009-04-03T13:46:09.967 回答