gpt4 book ai didi

java - Spring Boot 和 Flyway : Clear database data before integration tests

转载 作者:搜寻专家 更新时间:2023-11-01 01:49:08 24 4
gpt4 key购买 nike

我正在使用 Spring 引导框架 (v2.0.2) 构建 REST 服务,我在数据库中运行了集成测试。我在谷歌上搜索了很多,有大量关于在测试前清理数据库的文章,但不幸的是,我发现它们要么效率低下,要么是一个 hack,而不是 Spring boot。您能否耐心等待并提出解决此问题的好方法?

理想情况下,我认为数据库不应该在每次测试之前被清除,而是在它们中的某些组之前被清除,比如套件或者每个测试类。找到的建议之一如下所示:

@Autowired
protected Flyway flyway;

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

在每次测试之前重建数据库,显然效率不高。将其更改为静态上下文并使用 @BeforeClass 不起作用,因为 Spring 不会注入(inject)静态字段。

是否有一些好的方法可以从静态上下文访问此 flyway bean,以使此解决方案有效?

这里的子问题: Flyway 有一个命令 clean,它不仅清除数据,而且删除所有内容,然后 migrate 命令再次执行迁移。这似乎也是开销。由于无论如何都会在启动时检查迁移,所以我认为没有必要在每个测试组之前拆除和重建所有内容。只需清除数据就足够了。您能否就如何实现这一目标提供一些建议?

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

谢谢!

最佳答案

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

@Configuration
public class TestConfig {
@Bean
public FlywayMigrationStrategy clean() {
return flyway -> {
flyway.clean();
flyway.migrate();
};
}
}

关于java - Spring Boot 和 Flyway : Clear database data before integration tests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50915868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com