当前位置: 首页 > 知识库问答 >
问题:

使用Testcontainers和Liquibase时在测试之间重置数据库

阎乐池
2023-03-14

如果我在集成测试中使用的是单例数据库容器,那么在每次测试之前,我如何确保数据库处于干净状态(没有数据)?代码库使用Liquibase进行数据迁移。

共有1个答案

冯通
2023-03-14

如果要在每次测试之后/之前删除数据库中的所有行,可以:

  1. 对测试使用@transactional,那么Spring将在每次测试后回滚事务
  2. 使用jdbctemplate/YourEntityRepository(Spring Data JPA Repositories)并使用deleteSQL查询(jdbctemplate)或.deleteAll()(Spring Data JPA Repositories)删除它们,作为JUnit Jupiters的一部分@Beforeeach/@Aftereach

您从Liquibase应用的DDL脚本(create)将保留下来,并且每个测试都从一个有效的模式开始。

 类似资料:
  • 我正在尝试用liquibase为一些测试设置数据库模式和一些测试数据。每个测试都有一个单独的changelog,它为测试设置模式和一些特定的数据。 为了使我的测试工作,我需要在每次测试之前删除模式,并用新的测试数据填充它。然而,这似乎并不奏效,因为有些测试正在失败,因为旧的测试数据仍然可用。我觉得我的配置有些东西不对。如何在每次测试之前强制liquibase删除模式?

  • 我正在使用SpringBoot2,我正在尝试使用H2 Liquibase JUNIT配置一个单元测试。 我认为liquibase没有执行更改日志文件并应用SQL命令,单元测试不识别我的表。 我在文件中放入了错误的sql,以查看是否执行了changelog文件,但似乎没有执行。 为什么我的应用程序不能访问表?也许liquibase没有执行? 在src/test/resource中,我有一个文件:ap

  • 我正在尝试为kafka消息传递设置集成测试,并从使用Embedded-Kafka转向使用TestContainers。给定docker-compose的以下配置和所有集成测试的基类: Kafka-compose.yaml: 我遇到的问题很少: 似乎spring-Kafka和它的在所有可能的用@springboottest注释的测试中都是活动的,而不仅仅是在Kafka特定的测试中。这意味着发送到Ka

  • 类似问题:在Android Studio中的Android工具测试和单元测试之间共享代码 我的设置如下: 包含单元测试的< li> 文件夹。这些可以是Java或Kotlin类 包含仪器测试的< li> 。这些也可以是Java或Kotlin类 < li> 是一个文件夹,其中包含一组在单元测试和测量测试之间共享的实用程序。 这种共享在gradle中定义为: 这允许< code>src/test或< c

  • 我的测试顺序如下: 在这四个测试中,我创建了同一个实体。由于我没有在每个测试用例之后从表中删除记录,因此会得到以下异常: 我想用以下约束条件来解决这个问题: null

  • 相关pom.xml 我的测试类: 我只是在试着测试数据库。 类级别上的@SQL注释不能像我的情况那样与Testcontainers初始化一起工作吗? 这里需要什么使我的两个初始脚本都运行? 我尝试使用.WithInitScript,它运行了。但是,我有很多数据要初始化,而且文件太大(而且会增长),所以我将DDL(模式)和Inserts(数据)分开。现在,我的问题是如何使用“WithInitScri