我正在开发一个 Web 应用程序,我想使用 Jetty/hsqldb 运行一系列集成测试。所以 jetty 会旋转起来,webdriver 会点击一下,然后测试就会结束,在数据库中留下一些垃圾。因为我想运行超过 1 个测试,所以这是有问题的。
在其他项目中,我们有一个以编程方式逐表删除行的函数,但是这个项目的数据库很复杂,在这里实现它是不可行的。
最好的解决方案是保存一个已知的 hsql 状态,我可以在每次测试之前将其加载到数据库中。
另一种解决方案是删除并重新创建表。
在我所做的所有研究中,我只发现了模糊的不可重现的提示,因此将不胜感激。
最佳答案
在我们的项目中,我们使用 dbUnit 为每个测试将数据加载到我们的空数据库中。测试启动一个事务并在不提交事务的情况下刷新他们需要保存的任何内容。测试运行后,我们检查延迟约束和回滚。这样数据库始终保持为空并且测试不会相互影响(串行运行时)。
为了使用同一组测试数据高性能地执行一系列测试,我们在插入测试数据后设置一个保存点,然后我们只回退到该保存点,而不是回滚所有内容。
总而言之,这是很多工作。无论如何,我们认为它为我们的项目带来了返回。
关于java - 在集成测试之间以编程方式重置 Hibernate 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22996291/