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

Spring boot和Flyway:在集成测试之前清除数据库数据

方夜洛
2023-03-14

我正在使用Spring boot framework(V2.0.2)构建一个REST服务,其中我有在数据库上运行的集成测试。我搜索了很多关于在测试前清理数据库的文章,但不幸的是,我发现它们要么效率低,要么是一个黑客,不适合Spring Boot。你能不能,请忍耐一下,给我一个解决这个问题的好办法?

理想情况下,我认为不应该在每次测试之前清除数据库,而是在一组测试之前清除数据库,比如suite或每个测试类。找到的一条建议是这样的:

@Autowired
protected Flyway flyway;

@Before
public void init() {
    flyway.clean();
    flyway.migrate();
}

这种方法在每次测试之前都要重建数据库,显然效率不高。将其更改为静态上下文并使用@beforeClass是行不通的,因为Spring不注入静态字段。

有没有什么好的方法可以从静态上下文中访问这个flyway bean,使这个解决方案起作用呢?

这里的子问题:Flyway有一个命令clean,它不仅清除数据,而且删除所有内容,然后migrate命令再次执行迁移。这也像是架空的。由于迁移都是在启动时检查的,所以我不认为有必要在每个测试组之前拆掉和重建所有的东西。仅仅清除数据就足够了。你能就如何实现这一点提出一些建议吗?

总而言之,我正在寻找一种在每组集成测试(例如每个类)之前删除数据库数据(如果可能的话,不删除表)的标准方法。我想每个人在使用Spring boot时都面临这个任务,所以也许html" target="_blank">框架本身考虑了一些很好的解决方案。

谢谢你!

共有1个答案

魏彦
2023-03-14

您可以为测试创建配置文件。它将在所有测试之前运行一次。

@Configuration
public class TestConfig {
@Bean
public FlywayMigrationStrategy clean() {
    return flyway -> {
        flyway.clean();
        flyway.migrate();
    };
}
}
 类似资料:
  • 我正在用Cucumber编写验收测试,我想使用H2数据库进行测试。 应用程序测试属性如下所示: 在目录resources/db/migration中,我有一个包含这些脚本的sql文件: 但是当我运行测试时,H2用默认格式创建模式,而不是使用脚本: 如您所见,所有VARCHAR都是使用255大小创建的,而不是真实值。 你能帮我把飞行道和H2整合起来吗? 谢谢!

  • 问题内容: 是否有人对从集成测试框架(如Selenium)进行的回滚数据库事务的最佳实践或首选方式有任何建议? 这是当前的情况:我们有一个.net Web项目,其中包含许多在单元测试环境中可以正常工作的单元测试- 每个测试都继承一个父类,该父类在[SetUp]中打开一个事务,并在其中回滚该事务。 [TearDown]。每次测试后,我们的单元测试数据库都恢复到原始状态。 但是,一旦进入集成环境,情况

  • 我正在尝试用Micronaut编写一个集成测试。 我有一个控制器类:

  • 本文向大家介绍SpringBoot集成Flyway进行数据库版本迁移管理的步骤,包括了SpringBoot集成Flyway进行数据库版本迁移管理的步骤的使用技巧和注意事项,需要的朋友参考一下 Flyway简介 Flyway中的迁移(migrations)模式 Flyway对数据库的所有更改都称为 migrations(迁移) 。 migrations(迁移) 分为版本控制(Versioned)迁移

  • 本文向大家介绍SpringBoot使用flyway初始化数据库,包括了SpringBoot使用flyway初始化数据库的使用技巧和注意事项,需要的朋友参考一下 概述 Flyway这款数据库版本工具就算大家没有使用过但也略有耳闻了,SpringBoot对该款工具进行集成的框架可以让我们在启动SpringBoot应用时自动去找SQL版本文件进行比对执行,但在迁移或初始化时往往还是需要先手动进行下数据库

  • 我们从项目一开始就没有使用过Flyway。我们正处于先进的发展状态。让我们在与詹金斯的项目中开始使用Flyway。 从留档,我了解到的是: 将开发模式(DDL和DML)的备份作为SQL脚本文件,提供一个像V1_0_1__initial.SQL这样的文件名。 使用“flyway clean”清理开发数据库。 开发数据库基线 “飞行路线基线 -基线版本 =1.0.0” 现在,执行"flyway迁移",