0

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

NON_STRICT 不再起作用,但是,如果我想确保我有 2 行,不多不少(例如,如果表确实有 after.xml 中指定的 2 行,无论是否我是否有更多行)。

所以,我想我应该使用assertionMode = DEFAULT. 当我这样做时,我得到的错误类似于“预期的列是 34,但在表中找到 31”。它只找到了 31,因为我只在 after.xml 中指定了 31。其他 3 个为空,所以我将它们排除在每个 DBUnit 文档的 after.xml 之外。DEFAULT 似乎使 DBUnit 期望在我的 after.xml 中指定 34 列,无论它们是否为空,我是否遗漏了什么?

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

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

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

4

1 回答 1

0

我已经尝试过迂回的方法,......我错过了什么吗?

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

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

请参阅忽略比较的某些列

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

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

于 2018-03-07T14:50:30.227 回答