java - 使用 Hibernate/Spring/JUnit 设置和拆除复杂的数据库状态

标签 java hibernate spring junit

我有一个正在单元测试的类,它需要相当广泛的数据库设置才能运行各个测试方法。此设置需要很长时间:出于希望与手头问题无关的原因,我需要以编程方式而不是从 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/

相关文章:

java - Array/ArrayList如何直接找到对象的索引?或者ArrayList如何知道对象存储在这个地方?

java - Spring Boot Controller 不响应 POST 请求

java - 构建一个可以在验证客户端后存储客户端详细信息的 java 服务器

java - failed.org.hibernate.exception.JDBCConnectionException : Error calling Driver#connect with PostGres Hibernate

java - hibernate : org. hibernate.LazyInitializationException:未能延迟初始化角色集合:没有 session 或 session 已关闭

java - 付款方式:通过预付卡付款

java - Hibernate实体中的复合@NaturalId

java - Vaadin 应用程序与 MySQL 数据库

java - Camunda 数据库连接关闭但被 camunda 引擎选中

java - 使用 Jackson 将 java.time.localdate 序列化为 json