如何在测试容器中填充数据?

Dmy*_*kyi 0 java spring-boot testcontainers

语境:

我有一个非Spring Boot应用程序,我将其包装在 Spring Boot 中以测试功能。碰巧代码在测试中有一个内存数据库,我想针对不同的数据库进行测试以重现生产环境。我决定保持testcontainers所有现有测试不变。

问题:

我需要将数百万行加载到测试容器中。问题是如何填充数据库testcontainers?我发现了类似的问题->如何填充testcontainers但我仍然不知道如何在其中填充数据。

我如何填充数据testcontainers

DatabaseTestInitalizer.java我用于实例化容器:

import org.springframework.boot.test.util.EnvironmentTestUtils;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.testcontainers.containers.MSSQLServerContainer;

public class DatabaseTestInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {

    private MSSQLServerContainer mssqlServerContainer;

    @Override
    public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
        mssqlServerContainer = new MSSQLServerContainer();
        mssqlServerContainer.start();

        // This is solution for 1.x.x Spring Boot framework
        // Article for migration from 1.x.x to 2.x.x Spring Boot /sf/ask/3830329681/
        EnvironmentTestUtils.addEnvironment(configurableApplicationContext.getEnvironment(),
                "spring.datasource.url=" + mssqlServerContainer.getJdbcUrl(),
                "spring.datasource.username=" + mssqlServerContainer.getUsername(),
                "spring.datasource.password=" + mssqlServerContainer.getPassword()
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

Dmy*_*kyi 8

经过更严格的搜索后,我可以使用withInitScript架构和数据并将其定义到 中init.sql,确保它db/init.sql位于 test/resources 文件夹中。

它的工作原理如下:

public MSSQLServerContainer mssqlServerContainer = (MSSQLServerContainer) new MSSQLServerContainer()
            .withInitScript("db/init.sql")
            .withExposedPorts(1433);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您不需要Flyway.