gpt4 book ai didi

java - Testcontainer 的 Redis 容器连接到与测试中定义的容器不同的容器

转载 作者:IT王子 更新时间:2023-10-29 06:09:28 45 4
gpt4 key购买 nike

我正在我的 Spring Boot 应用程序中进行集成测试。该应用需要使用 Redis。

在开发阶段,我有一个应用连接到的本地 Redis 容器。

对于集成测试,我使用 testcontainers我也关注了他们的example of how to use a Redis container .

在某些时候,我明白只有当开发容器启动并运行时,测试才能正确运行。如果关闭,则集成测试失败,因为它们无法访问 Redis。

所以集成测试类看起来像这样:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SharkApplication.class,
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@TestPropertySource(locations = "classpath:application-integrationtests.yml")
@AutoConfigureMockMvc
public class SharkIntegrationTest {
static GenericContainer redis = new GenericContainer("redis:3.0.6")
.withExposedPorts(6379);

@BeforeClass
public static void before(){
redis.start();
}

@AfterClass
public static void after(){
redis.stop();
}
...

运行测试时,我可以在日志中看到:

14:36:24.372 [main] DEBUG 🐳 [redis:3.0.6] - Starting container: redis:3.0.6
14:36:24.372 [main] DEBUG 🐳 [redis:3.0.6] - Trying to start container:
redis:3.0.6
14:36:24.373 [main] DEBUG 🐳 [redis:3.0.6] - Trying to start container:
redis:3.0.6 (attempt 1/1)
14:36:24.373 [main] DEBUG 🐳 [redis:3.0.6] - Starting container: redis:3.0.6
14:36:24.373 [main] INFO 🐳 [redis:3.0.6] - Creating container for image:
redis:3.0.6
...
14:36:25.282 [main] INFO 🐳 [redis:3.0.6] - Container redis:3.0.6 started

但随后应用程序失败,因为它无法访问 Redis:

Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused: connect

在某些时候,我试图更改容器应该启动的端口。从 6379 到 16379(在代码和 yml 文件中都发生了变化),但随后测试进入无限循环并打印到屏幕上:

14:41:57.258 [ducttape-0] DEBUG org.testcontainers.containers.ExecInContainerPattern - /amazing_beaver: Running "exec" command: /bin/bash -c </dev/tcp/localhost/16379 && echo

最佳答案

您遗漏了测试容器的一个非常重要的方面——随机端口。

从您提到的链接:

For example, with the Redis example above, the following will allow your tests to access the Redis service:
String redisUrl = redis.getContainerIpAddress() + ":" + redis.getMappedPort(6379);

测试容器以随机端口启动一切以避免冲突。

可以关注this workshop正确地整合它。

关于java - Testcontainer 的 Redis 容器连接到与测试中定义的容器不同的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50856826/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com