使用内存中h2的具有空日期的平台之间的dbunit行为不一致

时间:2013-04-05 11:47:05

标签: java sql hibernate h2 dbunit

我在这里用DBUnit测试遇到了一个有趣的问题。

我们使用DBUnit测试和xml数据集测试了一些代码。我的测试结果与平台之间完全相同的数据集和代码文件不一致,因此我决定遵循这条路径,因为我将重构DB Access类的一部分。

我遇到的问题如下:

  1. 数据集有3条记录与hbm文件中定义的某个查询匹配。
  2. 查询执行“按DATE_FIELD desc排序”,但并非数据集中的所有记录都设置了此DATE_FIELD(意味着它应该被解释为null或脚本中的默认值,这两个平台上也是相同的)
  3. 在Maven运行测试的一个平台(Linux服务器)上,它们都没问题,但是在我的带有Windows的PC上,记录是从数据库(数据集)中以不同的顺序提取的,所以当我得到错误时测试验证记录的顺序。

    所以,我知道修改数据集会让我的测试在两边变成绿色,但是如果有人在其中一个记录中写了这个没有日期列的数据集,他可能已经知道一些业务规则我不是意识到这一点,所以我真的没有修改这个场景,因为它可能会导致未来出现问题。

    在寻找答案后,我正在修改这个问题。我正在寻找的答案,我如何让H2数据库与不同平台上的空日期保持一致。我必须设置什么参数才能在不触及查询的情况下为整个数据库获取NULLS FIRST或NULLS LAST?

    非常感谢和问候。

1 个答案:

答案 0 :(得分:1)

那么,

我正在回答我自己的问题,因为我找到了答案,更好的后续工作会很好,但我认为这很有道理。

我按照此页面上的说明操作:

http://www.h2database.com/javadoc/org/h2/constant/SysProperties.html

在加载驱动程序之前,在运行时设置sortNullsHigh属性:

System.setProperty(“h2.sortNullsHigh”,“true”);

也许稍后我们会看到一种方法将它放入配置文件中,在使用jenkins / maven运行所有中央单元测试之后,属性设置正确。

此致