2

我将 DbUnit 与 Unitils 一起使用,这在大多数情况下都非常有效。

今天我发现了一个奇怪的问题。

情况是:

  • 我使用 Hibernate,并使用“增量”生成器获得 id:
<id name="id">
   <generator class="increment"/>
</id>
  • 我准备了测试数据集,其中最大 id 为 5。
  • 我使用干净插入加载策略。
  • 我有两种测试方法test1test2,每一种都在此表中添加一行。
  • 方法后test1新添加的行的 id=6。
  • 方法后test2新创建的行具有 id=7。

这一切都好,我明白为什么会这样。从维护的角度来看,这是一个问题。如果我在两者之间添加第三个测试方法,test2即使没有任何改变,方法也会突然失败,因为行会得到不同的 id。

无论如何我可以强制 DbUnit 或 Hibernate 在每个测试方法之前计算下一个 id 值吗?

4

2 回答 2

3

解决方案是不依赖生成的 id:

  • 它们不在您的测试控制范围内。
  • 如果您使它们受测试控制,则不再测试被测类
于 2010-02-09T10:06:37.603 回答
3

首先,您应该提供完整的数据集,是的id。如果不是,请不要测试或基于ids. 为什么不测试?因为它已经经过良好测试和可靠的东西。永远记住永远不要测试第三方库,它们中的大多数已经经过了很好的测试。但是不依赖ids 似乎是完全不可能的。我同意,您应该编写一些模拟类来为您解决这个问题,或者您可以提供一些 setter 方法来覆盖您自己生成的值。

第二个选项总是用空表开始你的测试用例。在每个测试用例之前,您可以编写一个夹具来为您清理表格。

于 2010-02-09T10:20:59.397 回答