java - 在集成测试之间以编程方式重置 Hibernate 数据库

标签 java hibernate integration-testing hsqldb

我正在开发一个 Web 应用程序,我想使用 Jetty/hsqldb 运行一系列集成测试。所以 jetty 会旋转起来,webdriver 会点击一下,然后测试就会结束,在数据库中留下一些垃圾。因为我想运行超过 1 个测试,所以这是有问题的。

在其他项目中,我们有一个以编程方式逐表删除行的函数,但是这个项目的数据库很复杂,在这里实现它是不可行的。

最好的解决方案是保存一个已知的 hsql 状态,我可以在每次测试之前将其加载到数据库中。

另一种解决方案是删除并重新创建表。

在我所做的所有研究中,我只发现了模糊的不可重现的提示,因此将不胜感激。

最佳答案

在我们的项目中,我们使用 dbUnit 为每个测试将数据加载到我们的空数据库中。测试启动一个事务并在不提交事务的情况下刷新他们需要保存的任何内容。测试运行后,我们检查延迟约束和回滚。这样数据库始终保持为空并且测试不会相互影响(串行运行时)。

为了使用同一组测试数据高性能地执行一系列测试,我们在插入测试数据后设置一个保存点,然后我们只回退到该保存点,而不是回滚所有内容。

总而言之,这是很多工作。无论如何,我们认为它为我们的项目带来了返回。

http://dbunit.sourceforge.net

关于java - 在集成测试之间以编程方式重置 Hibernate 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22996291/

相关文章:

java - 删除 ArrayList 对象问题

java - 多线程,统计正在运行的线程数

java - 获取两个日期之间有入场记录

java - 遗留 Hibernate 应用程序的预期升级路径是什么?

hibernate - 传递给持久化 Kotlin 的分离实体

database - 关于 SSDT 开发过程的提示和关于自动化单元/集成测试的最佳实践

testing - 持续集成服务器上的集成测试

c# - 您可以将 XUnit 测试标记为显式吗?

java - 在 Android Studio 中配对蓝牙设备

java - 从不同的jsp调用相同的servlet以达到不同的目的