我有一个正在单元测试的类,它需要相当广泛的数据库设置才能运行各个测试方法。此设置需要很长时间:出于希望与手头问题无关的原因,我需要以编程方式而不是从 SQL 转储填充数据库。
我遇到的问题是拆解。如何轻松回滚在数据库设置阶段所做的所有更改?
我目前正在使用 Hibernate + Spring Transactional Testing 支持,这样我的个人测试方法就包含在事务中。
一个解决方案是在每个测试方法中进行数据库设置,这样数据库设置就会自动回滚。但是,测试方法将永远运行,因为每个方法都需要重新准备数据库。
还有其他想法吗?基本上,我正在寻找一种方法来运行我的数据库设置,运行我的个人测试(每个测试都包含在一个事务中,该事务在执行后回滚),然后回滚初始数据库设置。关于使它以 Hibernate/Spring/Junit 方式工作的任何想法?是否有 Hibernate 的“删除所有表”等效命令?
最佳答案
您是否受困于特定的数据库供应商?如果没有,您可以使用内存数据库,例如 HSQLDB .完成测试后,您只需丢弃状态。这仅适用于在测试套件开始时(即在您的编程设置之前)表格可以为空的情况。
您仍然需要创建表,但是如果所有内容都使用 Hibernate 整齐地映射,您可以使用 hbm2ddl 来生成您的表。您所要做的就是将以下内容添加到您的测试 session 工厂定义中:
<session-factory>
...
<property name="hibernate.hbm2ddl.auto">create</property>
...
</session-factory>
如果这个解决方案看起来适用,我可以详细说明。
关于java - 使用 Hibernate/Spring/JUnit 设置和拆除复杂的数据库状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/822846/