尝试将 Testcontainers 规则与抽象类中的网络一起使用时出现“没有这样的网络”错误
Posted
技术标签:
【中文标题】尝试将 Testcontainers 规则与抽象类中的网络一起使用时出现“没有这样的网络”错误【英文标题】:"No such network" error when trying to re-use Testcontainers rules with network from abstract class 【发布时间】:2018-03-15 17:35:30 【问题描述】:假设我有一个名为 AbstractTestWithNetwork
的抽象类:
@RunWith(JUnit4.class)
public abstract class AbstractTestWithNetwork
@ClassRule
public static Network network = Network.newNetwork();
@ClassRule
public static GenericContainer etcd = new GenericContainer<>("alpine:3.6")
.withNetwork(network);
我想通过扩展它来简单地重新使用它以在多个类中拥有相同的容器:
public class FirstTestClass extends AbstractTestWithNetwork
@Test
public void emptyMethod() throws Exception
System.out.println("An empty test method");
还有一个SecondTestClass
,内容相同。
我可以从 IDE 单独运行每个类,它们会通过。但是当我运行gradle test
或从IDE 中选择带有测试类的整个包时,只有第一个测试类通过。第二个我得到:
org.testcontainers.containers.ContainerLaunchException: Container startup failed
Caused by:
org.rnorth.ducttape.RetryCountExceededException: Retry limit hit with exception
Caused by:
org.testcontainers.containers.ContainerLaunchException: Could not create/start container
Caused by:
java.lang.reflect.UndeclaredThrowableException
Caused by:
java.lang.reflect.InvocationTargetException
Caused by:com.github.dockerjava.api.exception.NotFoundException: "message":"No such network: a48cf082ab42a55c843e9963c3938f44dd93cceae09e1724d4fefd5b45f235f1"
【问题讨论】:
【参考方案1】:我检查了实现并发现了a bug in Networks' implementation。
在 TestContainers
但我要告诉你一个好消息 - 在修复之前有一个简单的解决方法:只需从“网络”字段中删除 @ClassRule。
【讨论】:
以上是关于尝试将 Testcontainers 规则与抽象类中的网络一起使用时出现“没有这样的网络”错误的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 JUnit 5 在 Kotlin 中创建 TestContainers 基测试类
无法连接到 SpringTest 中由 TestContainers 创建的容器