在使用 TestContainers 时,如果在测试方法中使用了注解 @DirtiesContext,并设置了类级别的 DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD,那么每个测试方法执行后都将强制销毁 Spring 上下文,并重新创建新的 Spring 上下文。这种操作可能会导致测试用例的执行效率下降,因为在每次测试方法之间都要重建 Spring 上下文。
如果您不想使用此模式,您可以使用 Testcontainers 和 Spring 的集成支持来规避此限制。您只需要在测试类上添加 @Testcontainers 和 @SpringBootTest 注释,然后添加 testcontainers-ryuk 依赖:
com.palantir.docker
ryuk
0.2.3
test
此时,只需在 test 方法中使用 @Container 注释,您就可以在测试过程中始终保持 TestContainers 容器和 Spring 容器的状态:
@SpringBootTest
@Testcontainers
class MyTest {
@Container
static PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer();
@Autowired
MyService myService;
@Test
void test() {
// use myService with postgreSQLContainer
}
}
通过这种方法,您可以更加有效地管理测试环境,并在测试过程中保持容器和 Spring 上下文的状态。