防止对每个JUnit测试重新初始化Spring bean

时间:2018-06-27 14:34:57

标签: java spring junit integration-testing liquibase

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

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

测试配置如下:

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

如何配置数据库初始化(模式和数据),使其仅执行一次,而不是针对每次测试?

1 个答案:

答案 0 :(得分:0)

这只是想法而不是testet,但是如果您不并行执行脚本,那么如何使用ScriptUtilsResourceDatabasePopulator iside @Before方法并进行一些切换呢?

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

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