首页 > 解决方案 > 防止每个 JUnit 测试的 Spring bean 重新初始化

问题描述

我有基于访问数据库的 JUnit 的集成测试。我们还使用 Liquibase Spring bean 来初始化数据库。

如果我尝试并行运行多个测试,每个测试都会尝试使用 Liquibase 初始化 DB,从而导致锁定并最终失败,因为一次只有一个 Liquibase 实例可以修改 DB。

测试配置如下:

@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
@WebAppConfiguration
@Sql({"/schema/insert-test-data.sql"})

如何配置数据库初始化(模式和数据),它只执行一次而不是每次测试?

标签: javaspringjunitintegration-testingliquibase

解决方案


这只是想法而不是 testet,但如果您没有并行执行脚本,那么使用ScriptUtilsResourceDatabasePopulator iside@Before方法和一些开关如何。

@Before
public void init(){
    if (wasInitialized)
        return;

    new ResourceDatabasePopulator(new ClassPathResource("path/to/sql.sql")).execute(dataSource);
    wasInitialized = true;
}

推荐阅读