"没有这样的网络"尝试从抽象类重用网络使用Testcontainers规则时出错

时间:2017-10-04 10:45:22

标签: testcontainers

假设我有一个名为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 个答案:

答案 0 :(得分:2)

我检查了实施情况并发现了a bug in Networks' implementation

在TestContainers&lt; = 1.4.2中,Network的实例不可重复使用,即不能与@ClassRule一起使用。

但我有一个好消息 - 有一个简单的解决方法,直到它被修复:只需从&#34;网络&#34;删除@ClassRule字段。