使用 Testcontainers 和 Liquibase 时在测试之间重置数据库
Posted
技术标签:
【中文标题】使用 Testcontainers 和 Liquibase 时在测试之间重置数据库【英文标题】:Reset database between tests when using Testcontainers and Liquibase 【发布时间】:2021-06-17 07:12:53 【问题描述】:如果我在集成测试中使用单例数据库容器,如何在每次测试之前确保数据库处于干净状态(无数据)?代码库使用 Liquibase 进行数据迁移。
【问题讨论】:
【参考方案1】:如果您想在每次测试之后/之前删除数据库中的所有行,您可以:
-
使用
@Transactional
进行测试,Spring 将在每次测试后回滚事务
使用JdbcTemplate
/YourEntityRepository
(Spring Data JPA 存储库)并使用DELETE
SQL 查询(JdbcTemplate
)或.deleteAll()
(Spring Data JPA 存储库)将其删除,作为 JUnit Jupiters 的一部分 @987654327 @/@AfterEach
您从 Liquibase 应用的 DDL 脚本 (CREATE
) 将保留,并且每个测试都以有效架构开始。
【讨论】:
我选择了选项 2,因为 Hibernate(这是我们正在使用的 JPA 实现)会在某些表存在关系的情况下正确清理表。 选项 1) 确实不对我有用。以上是关于使用 Testcontainers 和 Liquibase 时在测试之间重置数据库的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot 集成测试 Sybase 和 Testcontainers
TestContainers 和 Mysql:用户“@'172.17.0.1”的访问被拒绝(使用密码:否)
如何将 Testcontainers 与 @DataJpaTest 结合使用以避免代码重复?
在 JUnit5 中使用 Testcontainers 和 gradle 时无法解析 'DockerImageName' 中的方法 'parse'