我将 DbUnit 与 Unitils 一起使用,大多数时候效果都很好。
今天发现一个奇怪的问题。
情况是:
- 我使用 Hibernate,并且有带有“增量”生成器的 id:
<id name="Id"> <generator class="increment"/> </id>
- 我准备了测试数据集,其中最大 id 为 5。
- 我使用干净插入加载策略。
- 我有两个测试方法
test1
和test2
,每个方法都在此表中添加一行。 - 在
test1
方法之后新添加的行的 id=6。 - 在
test2
方法之后新创建的行的 id=7。
这一切都很好,我明白为什么会这样。但从维护角度来看,这是一个问题。如果我在两者之间添加第三个测试方法,即使没有任何更改,方法 test2
也会突然失败,只是因为 row 将获得不同的 id。
我是否可以强制 DbUnit 或 Hibernate 在每个测试方法之前计算下一个 id 值?
最佳答案
首先,您应该提供完整的数据集,是的,还有 id
。如果不是,请不要测试或基于 ids
进行测试。为什么不测试呢?因为它已经经过充分测试且可靠。永远记住永远不要测试第三方库,其中大多数已经经过充分测试。但不依赖 id
似乎是不可能的。我同意,你应该编写一些模拟类来为你解决这个问题,或者你可以提供一些setter方法来覆盖你自己生成的值。
第二个选项始终以空表开始测试用例。您可以在每个测试用例之前编写一个固定装置来清理表格。
关于java - DbUnit:增量 id 生成问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2228105/