java - DbUnit:增量 id 生成问题

标签 java unit-testing hibernate junit dbunit

我将 DbUnit 与 Unitils 一起使用,大多数时候效果都很好。

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

情况是:

  • 我使用 Hibernate,并且有带有“增量”生成器的 id:
<id name="Id">
   <generator class="increment"/>
</id>
  • 我准备了测试数据集,其中最大 id 为 5。
  • 我使用干净插入加载策略。
  • 我有两个测试方法 test1test2,每个方法都在此表中添加一行。
  • 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/

相关文章:

java - while循环Int return方法内部完全死了

java - 是否可以使用 Mockito 进行严格的模拟?

unit-testing - 在 MS C# 单元测试中,如何断言发生了 ArgumentException?

mysql - 带有可选参数的命名查询在 mysql 中不起作用

java - Hibernate版本标签问题

java - 为什么 for 循环中的 Scanner#nextInt 不断抛出异常?

java - for循环这是什么意思?

java - 如何获取mysql中某一列的所有值

具有多个设置的 python 单元测试?

Spring Boot : The managed version is 1. 3.2.RELEASE Artifact 在 org.springframework.boot :spring-boot-dependencies:1. 3.2.RELEASE 中管理