JUnit 4.11-> 4.12引入了@Rule错误,不执行测试

时间:2019-01-08 14:48:01

标签: java junit4

我从JUnit 4.11切换到4.12。现在,我在@Rule带注释的方法执行中遇到了一个错误。我的规则方法如下:

@Rule
public WireMockRule testServer() {
    // ... other stuff gets created ...
    return new WireMockRule(
            wireMockConfig().extensions(...parameterized-extensions...).port(PORT), true);
}

现在,在启动之后,Rule方法被执行(很好),没有测试被开始(不好),但是testServer()方法立即被再次执行了 没有完成第一个。因此测试失败,因为端口已经绑定并且仍然绑定。

在4.11中没有问题。没有配置设置可以并行运行我的测试。我应该提到我的测试类已用@RunWith(Parameterized.class)参数化,但在4.11中按顺序执行。

1 个答案:

答案 0 :(得分:0)

我找到了错误的原因并进行了简单的修复。刚刚下载了WireMockRule的源代码并对其进行调试就看到了它。 事实证明,在JUnit 4.11中,在规则获得testServer()调用以运行测试之前,每个参数都将apply(...)方法称为一次,在4.12中,它始终称为 >两次,规则将获得apply(...)调用以运行测试。 因此解决方案很简单:

private WireMockRule testServer;

@Rule
public WireMockRule testServer() {
    if (testServer != null) {
        return testServer;
    }
    // ... other stuff gets created ...
    testServer = new WireMockRule(
        wireMockConfig().extensions(...parameterized-extensions...).port(PORT), true);
    return testServer;
}