DBUnit 布尔值
Posted
技术标签:
【中文标题】DBUnit 布尔值【英文标题】:DBUnit Boolean value 【发布时间】:2015-03-24 14:48:18 【问题描述】:在学习了 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>
将 active="false"
属性添加到客户端记录 [code=0003],我的集成测试失败并向我显示这条消息 Exception processing table name='Client'
,这导致客户端记录 [code=0001] 违反了活动非空列约束。
通过为所有记录上的活动列提供值来修复错误(在分支DBUnit_For_Boolean_Columns_Attempt_One)后(这有点偏离规范),它起作用了。但是我的目标能够使用上面编写的数据集成功运行集成测试。
问题是如何使用上面的数据集成功进行集成测试?到目前为止,我很难实施解决方案,所以我创建了一个 Bitbucket repository 供您使用现场查看并提供帮助。
更新日志
2015/02/04 变化
-
改进问题内容
添加了 Bitbucket 存储库
【问题讨论】:
【参考方案1】:(我在这里有一个不同的答案,这是对问题的完全误诊,因为我错过了 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();
或者,如果您不是自己创建构建器并且不想对其进行操作,只需确保在每个元素中都有 active
列,尤其是第一个元素:
<dataset>
<client code="0001" name="client_one" active="false" />
<client code="0002" name="client_two" active="true" />
</dataset>
【讨论】:
我明白了。那么我应该将值true
或false
放在哪里(例如:active
)?是否应该在dataSet.xml
上写为<Table active="<value>true</value>">
?我忘了提,我没有application-context.xml
,因为我使用的是 SpringBoot
但是如果这个布尔列可以设置为空呢?
@KaidoShugo 您可以使用<null /> instead of
NoSuchTableException: value
。这个错误怎么可能发生?
@KaidoShugo 你确定你完全按照这个例子吗?因为,正如你所说,你不应该得到这样的例外。你能分享你的 xml 以便我看看有什么问题吗?以上是关于DBUnit 布尔值的主要内容,如果未能解决你的问题,请参考以下文章