代码之家  ›  专栏  ›  技术社区  ›  Samurai Girl

Spring Bug和FoeWoad:在集成测试之前清除数据库数据

  •  3
  • Samurai Girl  · 技术社区  · 6 年前

    我正在使用spring boot framework(v2.0.2)构建一个rest服务,在那里我在数据库上运行集成测试。我搜索过很多,在测试之前有大量关于清理数据库的文章,但不幸的是,我发现它们要么效率低下要么是黑客攻击,而不是Spring引导。你能不能,请你容忍我,并提出一个解决这个问题的好办法?

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

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

    它在每次测试前重建数据库,显然效率不高。将此更改为静态上下文并使用 @BeforeClass 不工作,因为spring不注入静态字段。

    有没有一种很好的方法来从静态上下文中到达这个路由bean,使这个解决方案有效?

    这里的子问题: FielWew有一个命令,它不仅清除数据,而且丢弃所有的东西,然后迁移命令再次执行迁移。这也像是在头顶上。由于迁移是在启动时检查的,我认为没有必要在每个测试组之前拆解和重建所有内容。仅仅清理数据就足够了。你能就如何实现这一目标提出一些建议吗?

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

    谢谢您!

    1 回复  |  直到 6 年前
        1
  •  7
  •   evkm    6 年前

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

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