Kai*_*ugo 6 postgresql dbunit spring-test spring-test-dbunit
在学习了SpringBoot之后,我想进一步使用(DBUnit和SpringTestDBUnit)来处理集成测试.在整个过程中,一切进展顺利,直到我遇到数据集上布尔数据类型列的设置值.(数据集的内容如下)
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<Client code="0001" name="client_one" />
<Client code="0002" name="client_two" />
<Client code="0003" name="client_three" active="false" />
<Client code="0004" name="client_four" />
</dataset>
Run Code Online (Sandbox Code Playgroud)
将active="false"
属性添加到客户端记录[code = 0003],我的集成测试失败并向我显示此消息Exception processing table name='Client'
,导致客户端记录[code = 0001]违反了活动非空列约束.
通过在所有记录(有点偏离规范)上提供活动列的值来修复错误(在分支DBUnit_For_Boolean_Columns_Attempt_One上)之后,它起作用了.但是我的目标能够使用上面编写的数据集成功运行集成测试.
问题是如何使用上面的数据集成功进行集成测试?截至目前,我很难实现解决方案,所以我创建了一个Bitbucket存储库供您查看和帮助.
更新日志
2015/02/04变更
(我在这里有一个不同的答案,这是由于对问题的完全误诊,因为我错过了OP正在使用的事实FlatXmlDataSet
)。
来自FlatXmlDataSet
的文档:
默认情况下,表元数据是从每个表的第一行推导出来的。请注意,如果该表的第一行有一个或多个
null
值,DbUnit 可能会认为该表遗漏了某些列。
这似乎是这里的问题,因为第一个条目没有指定 的值active
。为了避免这个问题,您可以使用 DBUnit 的列感知属性,这实际上使 DBUnit 在推导表结构之前读取整个 XML:
FlatXmlDataSetBuilder builder = new FlatXmlDataSetBuilder();
builder.setInputSource(new File("path/to/dataSet.xml"));
builder.setColumnSensing(true); // HERE!
IDataSet dataSet = builder.build();
Run Code Online (Sandbox Code Playgroud)
或者,如果您不是自己创建构建器并且不想操作它,只需确保active
每个元素中都有该列,尤其是第一个元素:
<dataset>
<client code="0001" name="client_one" active="false" />
<client code="0002" name="client_two" active="true" />
</dataset>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
662 次 |
最近记录: |