我将 Testcontainers 1.15.3 与 Spring Boot 2.4 和 Junit5 一起使用。当我运行测试时, testcontainers 启动第一个容器并执行 Flyway 脚本,然后停止第一个容器。立即启动第二个容器(不启动 Flyway 脚本)。我的测试失败,因为第二个容器不包含数据。
抽象类:
@ExtendWith({RestDocumentationExtension.class, SpringExtension.class})
@TestPropertySource(locations = "classpath:application-test.properties")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public abstract class AbstractIntegrationTest {
//...
}
Run Code Online (Sandbox Code Playgroud)
测试类:
class ClassTest extends AbstractIntegrationTest{
@Test
void getById () throws Exception {
//...
}
}
Run Code Online (Sandbox Code Playgroud)
用于测试的属性文件(jdbc url 包含 jdbc: tc来启动 testcontainer):
spring.flyway.locations = classpath:database/structure,classpath:database/data
spring.datasource.url=jdbc:tc:postgresql:13.3:///databasename?TC_INITSCRIPT=file:src/test/resources/database/dataset/add_user.sql
Run Code Online (Sandbox Code Playgroud)
启动测试后的日志:
...
...
2021-06-21 12:56:52 [main] INFO [postgres:13.3] - Creating container for image: postgres:13.3
2021-06-21 12:56:52 [main] INFO [postgres:13.3] …Run Code Online (Sandbox Code Playgroud)