【发布时间】:2020-12-16 06:23:47
【问题描述】:
我正在为我的 Spring Boot 应用程序开发一些集成测试。我正在使用testcontainers 来创建MongoDB docker 映像。到目前为止我的代码:
ContainerListener.java 类:
公共类 ContainerListener 实现 TestListener {
@ClassRule
public static Network sharedNetwork = Network.newNetwork();
@ClassRule
public static GenericContainer mongoDBContainer = new GenericContainer("mongo:3.2.4").withNetwork(sharedNetwork)
.withNetworkAliases("mongo").withExposedPorts(27017);
public static MockServerContainer mockServerContainer = new MockServerContainer().withNetwork(sharedNetwork)
.withNetworkAliases("mockserver").withExposedPorts(1080);
public static int getMockPort() {
return mockServerContainer.getMappedPort(1080);
}
public static int getMongoPort() {
return mongoDBContainer.getMappedPort(27017);
}
public static void runAll() {
List.of(mongoDBContainer, mockServerContainer).forEach(e -> e.start());
}
public static void stopAll() {
List.of(mongoDBContainer, mockServerContainer).forEach(e -> e.stop());
}
}
还有SomeControllerIntegrationTest.java类:
import io.restassured.RestAssured;
import io.restassured.parsing.Parser;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;
public class RatingControllerIntegrationTest {
@BeforeAll
public static void setuo() {
ContainerListener.runAll();
}
@AfterAll
public static void tearDown() {
ContainerListener.stopAll();
}
@Test
public void detailsTest() throws Exception {
RestAssured.enableLoggingOfRequestAndResponseIfValidationFails();
RestAssured.defaultParser = Parser.JSON;
given().log().all().when().get("http://localhost:8080/actuator/info/").then().log().all()
.statusCode(200);
}
}
尽管运行测试后我收到以下错误:
org.testcontainers.containers.ContainerLaunchException: Container startup failed
Caused by: org.testcontainers.containers.ContainerFetchException: Can't get Docker image: RemoteDockerImage(imageName=mongo:3.2.4, imagePullPolicy=DefaultPullPolicy())
at org.testcontainers.containers.GenericContainer.getDockerImageName(GenericContainer.java:1279)
at org.testcontainers.containers.GenericContainer.logger(GenericContainer.java:613)
at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:320)
... 58 more
Caused by: java.lang.IllegalStateException: Can not connect to Ryuk at localhost:32770
at org.testcontainers.utility.ResourceReaper.start(ResourceReaper.java:176)
at org.testcontainers.DockerClientFactory.client(DockerClientFactory.java:168)
at org.testcontainers.LazyDockerClient.getDockerClient(LazyDockerClient.java:14)
at org.testcontainers.LazyDockerClient.listImagesCmd(LazyDockerClient.java:12)
at org.testcontainers.images.LocalImagesCache.maybeInitCache(LocalImagesCache.java:68)
at org.testcontainers.images.LocalImagesCache.get(LocalImagesCache.java:32)
at org.testcontainers.images.AbstractImagePullPolicy.shouldPull(AbstractImagePullPolicy.java:18)
at org.testcontainers.images.RemoteDockerImage.resolve(RemoteDockerImage.java:59)
at org.testcontainers.images.RemoteDockerImage.resolve(RemoteDockerImage.java:26)
at org.testcontainers.utility.LazyFuture.getResolvedValue(LazyFuture.java:20)
at org.testcontainers.utility.LazyFuture.get(LazyFuture.java:27)
at org.testcontainers.containers.GenericContainer.getDockerImageName(GenericContainer.java:1277)
... 60 more
【问题讨论】:
标签: java spring spring-boot docker integration-testing