我从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中按顺序执行。
答案 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;
}