java - DBUnit 忽略 xml 元素

标签 java xml postgresql postgresql-9.2 dbunit

我正在使用 DBUnit(2.4.9 版)加载数据以进行集成测试。我遇到一个奇怪的问题,即数据库 (postgres) 中有 1 个字段 (deleted) 未设置

这是我的 XML 数据加载:

<dataset>
    ...
    <workgroup id="100" created="2013-10-08 14:15:00.000" deleted="2013-10-08 14:15:00.000" version="0" name="Name1" org_id="100"/>
    ...
</dataset>

这是我的架构定义:

CREATE TABLE workgroup
(
  deleted timestamp without time zone,
  ... some constraints
)

所有其他字段都已正确设置。任何想法可能是什么原因造成的?谢谢!

编辑:

我缩小了问题的范围,它必须对 XML 文件顺序中的条目进行处理。如果我有:

<workgroup id="101" version="0" name="Name1"/>
<workgroup id="100" version="0" name="Name1" deleted="2013-10-08 />

它不起作用,但是这个:

<workgroup id="100" version="0" name="Name1" deleted="2013-10-08 />
<workgroup id="101" version="0" name="Name1"/>

正常工作。 DBUnit 错误?

编辑: 另一个我无法克服的例子:

<organisation id="1"/>
<organisation id="2" parent_id="1"/>

组织需要先存在,然后我们才能为其赋值,因此解决方法如下:

<organisation id="2" parent_id="1"/>
<organisation id="1"/>

将不起作用。

最佳答案

dbUnit 的“特点”是第一行定义列,然后忽略第二行未声明的列!

解决方案分两步:

  • 在第一行中包含所有列(也在所有以前的 dbunit 文件中)。就像在你的变通办法中一样
  • 使用 ReplacementDataSet 在需要的列中设置“null”

数据集.xml

  <organisation id="1" parent_id="[null]"/>
  <organisation id="2" parent_id="1"/>

以及在 Java 测试类中将列设置为 null 的技巧

@Override
protected IDataSet getDataSet() throws Exception {
  FlatXmlDataSetBuilder flatXmlDataSetBuilder = new FlatXmlDataSetBuilder();
  IDataSet ds = flatXmlDataSetBuilder.build(getClass().getResource("dataset.xml"));
  ds = new ReplacementDataSet(ds);
  ((ReplacementDataSet) ds).addReplacementObject("[null]", null);

  return ds;
}

关于java - DBUnit 忽略 xml 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21183419/

相关文章:

java - Spring,使用 POST 重定向到外部 url

c# - 将 CDATA 附加到字符串

java - 使用 Java XML 注释、JAXB 绑定(bind)多个元素以将属性作为键进行映射

postgresql - 如何在 Azure PostgreSQL 上编辑 postgresql.conf?

sql - PostgreSQL 中各组行之间的月份差异

PHP:使用 REGEX 从任何查询中获取表名(选择、更新、插入、删除)

java - 这段代码可以运行并编译,但是当我输入一个非常大的数字时什么也没有发生。 (欧拉计划,问题 3)

java - libGDX actor draw() 未调用

java - JAXB - 如何使用 <set varname = "String"value = name "String2"> 元素从对象创建 xml

java - 在 win8 上使用 eclipse 调试 war 文件中的小程序。 Java 7 15