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