情况:我的应用程序有一个docker-compose.yml文件,其中包含本地开发所需的容器,通常在运行应用程序之前,我会运行docker-compose up -d SERVICE_NAME
现在,对于集成测试,我使用testcontainers,并且我希望重用我在本地开发中使用的相同服务。如果没有服务运行,这很好,测试通过,但是如果我有服务运行,测试失败,因为它不能从compose创建另一个服务:
@Container
private static final DockerComposeContainer<?> dockerComposeContainer;
static {
dockerComposeContainer = new DockerComposeContainer<>(new File("docker-compose.yml"))
.withServices(SERVICE_NAME)
.withExposedService(SERVICE_NAME, SERVICE_PORT);
dockerComposeContainer.start();
}
有没有办法在测试过程中检查是否有SERVICE_NAME
服务在运行,以避免创建@Container
而只是重用“外部”?
1条答案
按热度按时间yvfmudvl1#
@Container
是一个JUnit extension注解,它将容器的生命周期绑定到测试的生命周期:静态字段的行为类似于@Before/AfterAll
中的启动/停止,示例字段-类似于@Before/AfterEach
。您可以选择不使用它,并通过调用
start()/stop()
手动控制生命周期。当然,您还可以实现任何所需的检查。例如,您可以使用类似于以下内容的内容:
以列出容器。
说到这里,我建议将测试设置迁移到使用GenericContainer,而不是依赖于DockerCompose模块,类似于here的概述