Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DBUnit忽略xml元素_Java_Xml_Postgresql_Postgresql 9.2_Dbunit - Fatal编程技术网

Java DBUnit忽略xml元素

Java DBUnit忽略xml元素,java,xml,postgresql,postgresql-9.2,dbunit,Java,Xml,Postgresql,Postgresql 9.2,Dbunit,我使用DBUnit(版本2.4.9)加载集成测试的数据。我遇到了一个奇怪的问题,即数据库(postgres)中没有设置1个字段(已删除) 以下是我的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"/> .

我使用DBUnit(版本2.4.9)加载集成测试的数据。我遇到了一个奇怪的问题,即数据库(postgres)中没有设置1个字段(
已删除

以下是我的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>
正在正确设置所有其他字段。你知道这是什么原因吗?谢谢

编辑:

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

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

工作正常。数据库单元错误

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

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

在我们分配it价值之前,组织需要存在,所以解决方法如下:

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

无法工作。

这似乎是dbunit的一个“功能”。要避免这种行为,必须提供dtd来定义列

<!ATTLIST organisation  
    id CDATA #REQUIRED  
    parent_id CDATA #IMPLIED  
> 

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

解决方案分为两个步骤:

  • 在第一行中有所有列(也在所有以前的dbunit文件中)。就像你的工作环境一样
  • 使用ReplacementDataSet在需要的列中设置“null”
dataset.xml

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

是的,那会有用的。但它比提供dtd文件更混乱。@FazoM是的,这是一种更“Java”的方法。
<!ATTLIST organisation  
    id CDATA #REQUIRED  
    parent_id CDATA #IMPLIED  
> 
  <organisation id="1" parent_id="[null]"/>
  <organisation id="2" parent_id="1"/>
@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;
}