如何在DBUnit中使用assertionMode = DEFAULT检查空列值?

时间:2018-03-05 22:01:24

标签: dbunit spring-test-dbunit

我有一个包含2行和34列的表格。列中的3列应为null。使用assertionMode = NON-STRICT时,我可以在after.xml文件中指定34-3 = 31列,DBUnit将意识到3个缺失列应该为null。 DBUnit确保表中的2行和34列与after.xml中的2行和31列精确匹配,并且我在after.xml(3列)中未指定的任何列将被假定为null,DBUnit将对其进行验证同样。

NON_STRICT不再有效,但是,如果我想确保我有2行,不多也不少(例如,如果表确实在after.xml中指定了2行,它将通过测试无论我是否有更多行)。

所以,我想我应该使用assertionMode = DEFAULT。当我这样做时,我得到的错误类似于"预期的列是34,但在表格#34中找到31。它只发现了31因为我在after.xml中只指定了31。其他3个为null,因此我将它们从每个DBUnit文档的after.xml中删除。 DEFAULT似乎使DBUnit期望在我的after.xml中指定34列,无论它们是否为null,我是否遗漏了某些内容?

我尝试了一些环形方法,比如指定一个查询来获取31列而不是34列(3列为空)并使用该查询的结果与我的after.xml进行比较。我还计算了行数并确保我有2行。但那些似乎是迂回的方法。

有没有办法在DBUnit中将列指定为null,而不是将它们留在我的after.xml中,因为DEFAULT似乎不喜欢它?

使用assertionMode = DEFAULT在DBUnit中将列指定为null的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

  

我尝试过迂回方法,...我错过了什么?

要让dbUnit忽略比较中的列,请使用排除列表:

ITable filteredTable = DefaultColumnFilter.excludedColumnsTable(filteredTable, excludeColumns);

请参阅Ignoring some columns in comparison

  

有没有办法在DBUnit中将列指定为null而不是离开   因为DEFAULT似乎不喜欢它,所以在我的after.xml中输出它们?

要让dbUnit将空值插入数据库表,请使用ReplacementDataSet并设置null替换对象,例如: [空值]。请参阅ReplacementDataSet