2012-01-12 170 views
1

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

我不想检查id本身,但我确实发现这很烦人。

在此先感谢

回答

1

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

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

0

尝试Unitils。这些工具可以删除数据库表并为每个测试用例自动重新创建它们。当然,你有其他的选择,你可以选择。这些是从here采取

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

可能您觉得这个工具有用。