使用HSQL,Hibernate和Spring以及测试自动增量

时间:2012-01-12 11:57:11

标签: hibernate spring unit-testing hsqldb auto-increment

我有一些整合测试,可以从JPA实体创建HSQL数据库。除了自动增量ID之外,这一切都很有效。这些似乎存储在测试之间而不是重置。例如,如果我在测试1中添加两个项目,那么HSQL中这两行的id值是1和2.在我的设置中,我然后销毁数据库。在测试2中,我添加了一个项目,id为3而不是返回1.我使用Spring作为事务管理器并连接所有依赖项。有没有人知道是什么原因引起的?

我不想检查ID本身,但我觉得这很烦人。

提前致谢

2 个答案:

答案 0 :(得分:1)

这是预期的。自动增量ID由数据库处理,因此,除非您删除表并在每次测试之前重新创建它们(您不应该这样做),ID将继续递增。

不要依赖测试中ID的绝对值。从设置测试用例时创建的实体中获取ID值。

答案 1 :(得分:0)

试试Unitils。此工具会删除数据库表并为每个测试用例自动重新创建它们。当然,您还可以选择其他选项。这些取自here

  • CleanInsertLoadStrategy :删除数据集中指定的表格中当前存在的所有数据后插入数据集
  • InsertLoadStrategy :只需将数据集插入数据库
  • RefreshLoadStrategy :使用数据集的内容“刷新”数据库的内容。这意味着更新现有行的数据并插入不存在的行。数据库中但不在数据集中的任何行不受影响
  • UpdateLoadStrategy :使用数据集的内容更新数据库的内容。这意味着更新现有行的数据。如果数据集包含不在数据库中的记录(即主键列具有相同值的记录),则会失败。

你可能觉得这个工具很有用。