我的单元测试使用Hibernate连接到内存中的HSQLDB数据库。我希望有一种方法可以在JUnit的TestCase.setUp()
方法中清除并重新创建数据库(包括模式和所有数据的整个数据库)。清理整个数据库(用Hibernate进行单元测试)
回答
你可以配置你的hibernate配置文件来强制数据库每次都重新创建你的表和模式。
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create-drop</property>
hibernate.hbm2ddl.auto创建SessionFactory时自动验证或导出模式DDL到数据库。使用create-drop,当SessionFactory显式关闭时,数据库模式将被删除。
例如验证|更新|创建|创建 - 删除
如果您不想在实际的hibernate配置中使用此配置,则可以为单元测试目的创建一个hibernate配置。
这只会在每次运行时重新创建它。这意味着如果你从eclipse运行你的测试,许多人会失败,如果单独运行会通过。至少这是我的经验。 – 2013-05-14 23:20:08
hibernate.hbm2ddl.auto=create-drop
并引导一个新的SessionFactory
。
仅在使用JPA时如何完成此操作? – Konsumierer 2011-08-19 12:35:55
如果您使用的是Spring,那么您可以在您的单元测试中使用@Transactional属性,并且默认情况下在每个单元测试结束时,所有持久数据都将自动回滚,因此您不必担心会丢失表格每次。
我HAA走到这里通过量http://automateddeveloper.blogspot.com/2011/05/hibernate-spring-testing-dao-layer-with.html
从测试的角度来看一个例子,最好的做法是每一个测试之后清除数据。如果您使用创建 - 删除,它也将删除表架构。这会导致每次重新创建模式的开销。
由于您使用的是提供直接截断机制的hsql,在这种情况下它将是最好的选择。
@After
public void clearDataFromDatabase() {
//Start transaction, based on your transaction manager
dao.executeNativeQuery("TRUNCATE SCHEMA PUBLIC AND COMMIT");
//Commit transaction
}
小心擦拭世界,重新开始新的每次。很快,您可能希望从系统中加载的一组“默认”测试数据开始。因此,你真正想要的是在每次测试运行之前恢复到基本状态。在这种情况下,您需要一个交易,在每次测试运行前回滚。
要做到这一点,你应该注释你的JUnit类:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:/path/to/spring-config.xml"})
@TransactionConfiguration(transactionManager="myTransactionManager", defaultRollback=true)
public class MyUnitTestClass {
...
}
然后标注您的每一个测试方法与@Transactional:
@Transactional
@Test
public void myTest() {
...
}
- 1. 使用整个数据表进行单元测试
- 2. 使用Arquillian进行Java集成测试,数据库清理
- 3. 仅使用H2数据库进行单元测试
- 4. 使用ContentProvider和数据库进行Android单元测试
- 5. 使用Symfony 2和数据库进行单元测试
- 6. 使用JUnit进行数据库单元测试
- 7. 使用EF6进行单元测试后重建数据库
- 8. 单元测试数据库
- 9. “单元”测试数据库
- 10. 单元测试数据库
- 11. 如何正确进行单元测试清理套接字
- 12. JUnit测试后清理数据库。
- 13. 在Node.js测试后清理数据库
- 14. Selenium测试后的数据库清理
- 15. SubSonic3在单元测试中清除测试数据/数据库TearDown操作
- 16. django单元测试多个数据库
- 17. 应该指涉从数据库进行单元测试的完整性?
- 18. 如何进行单元测试而不碰到数据库
- 19. 如何对数据库迁移进行单元测试?
- 20. 如何对数据库访问逻辑进行单元测试?
- 21. 在添加休眠数据库后进行单元测试
- 22. 如何对我的数据库内容进行单元测试?
- 23. 单元测试 - 数据库数据
- 24. 用Moq和一个通用仓库进行单元测试
- 25. CI +测试:针对数据库运行单元测试
- 26. 单元测试Spring @Repository&Hibernate
- 27. 单元测试与EF使用单独的数据库为每个测试
- 28. 单元测试:当在Eclipse中运行下面的测试使用Hibernate和H2数据库
- 29. 无法进行单元测试:$ _SESSION在每次测试运行前清空
- 30. 使用单元测试和测试数据库
如果您正在测试您的数据库,然后国际海事组织不是单元测试。 – Jamie 2010-09-05 16:07:05
我正在测试我的程序碰巧使用数据库。 – 2010-09-05 16:14:28
我正在测试一个用于访问数据库中的数据的类 – Lu55 2015-06-17 22:17:32