JUnit 4.11 -> 4.12 引入了@Rule 错误,不执行测试
JUnit 4.11 -> 4.12 introduced @Rule bug, doesn't executing tests
我从 JUnit 4.11 切换到 4.12。现在我在 @Rule
注释方法执行中有一个错误。我的规则方法如下所示:
@Rule
public WireMockRule testServer() {
// ... other stuff gets created ...
return new WireMockRule(
wireMockConfig().extensions(...parameterized-extensions...).port(PORT), true);
}
现在,启动后,规则方法被执行(正常),没有测试开始(不正常),但是 testServer()
方法立即被执行再次,没有完成第一个。所以测试失败,因为端口已经绑定并且仍然绑定。
在 4.11 中没有问题。 运行 我的并行测试没有配置设置。我应该提到我的 Test-Class 是用 @RunWith(Parameterized.class)
参数化的,但在 4.11 中是按顺序执行的。
我找到了错误的原因并进行了简单的修复。刚刚通过下载 WireMockRule 的源代码并对其进行调试看到了它。
事实证明,在 JUnit 4.11 中,在规则获得对 运行 测试的 apply(...)
调用之前,testServer()
方法每个参数被调用 一次 ,在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;
}
我从 JUnit 4.11 切换到 4.12。现在我在 @Rule
注释方法执行中有一个错误。我的规则方法如下所示:
@Rule
public WireMockRule testServer() {
// ... other stuff gets created ...
return new WireMockRule(
wireMockConfig().extensions(...parameterized-extensions...).port(PORT), true);
}
现在,启动后,规则方法被执行(正常),没有测试开始(不正常),但是 testServer()
方法立即被执行再次,没有完成第一个。所以测试失败,因为端口已经绑定并且仍然绑定。
在 4.11 中没有问题。 运行 我的并行测试没有配置设置。我应该提到我的 Test-Class 是用 @RunWith(Parameterized.class)
参数化的,但在 4.11 中是按顺序执行的。
我找到了错误的原因并进行了简单的修复。刚刚通过下载 WireMockRule 的源代码并对其进行调试看到了它。
事实证明,在 JUnit 4.11 中,在规则获得对 运行 测试的 apply(...)
调用之前,testServer()
方法每个参数被调用 一次 ,在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;
}