我有一个正在进行单元测试的类,在运行各个测试方法之前,它需要相当广泛的数据库设置。此设置需要很长时间:由于希望与当前问题无关的原因,我需要以编程方式填充DB,而不是从SQL转储填充。
我的问题是拆卸。如何轻松回滚在数据库安装阶段所做的所有更改?
我目前正在使用Hibernate + Spring事务性测试支持,这样我的单个测试方法就被封装在事务中。
一种解决方案是在每个测试方法内进行db设置,使得db设置将自动回滚。但是,测试方法将永远运行,因为每个方法都需要重新准备数据库。
还有其他想法吗?基本上,我正在寻找一种方法来运行我的数据库设置,运行我的单独测试(每个测试都包装在一个事务中,在执行后被回滚),然后回滚初始的数据库设置。有什么想法可以让它以Hibernate / Spring / Junit的方式工作吗?有没有Hibernate的"drop all tables“命令?
发布于 2009-05-05 07:24:52
您是否坚持使用特定的数据库供应商?如果没有,您可以使用内存中的数据库,比如HSQLDB。当您完成测试时,您只需丢弃状态。这仅适用于在测试套件开始时(即在编程设置之前)表可以为空的情况。
您仍然需要创建表,但是如果使用Hibernate整齐地映射了所有内容,则可以使用hbm2ddl生成表。您需要做的就是将以下内容添加到您的测试会话工厂定义中:
<session-factory>
...
<property name="hibernate.hbm2ddl.auto">create</property>
...
</session-factory>如果这个解决方案看起来适用,我可以详细说明。
发布于 2009-05-05 01:52:21
你可能想看看Junit 4的@AfterClass注解,这个注解将在测试完成时运行。
发布于 2009-05-05 01:52:27
在这方面,DNUnit应该会对你有所帮助。如果您愿意,您可以为每个单独的测试用例创建单独的数据集。
https://stackoverflow.com/questions/822846
复制相似问题