【发布时间】:2019-01-08 14:48:00
【问题描述】:
我从 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 中没有问题。没有配置设置来并行运行我的测试。我应该提到我的测试类是用@RunWith(Parameterized.class) 参数化的,但是在 4.11 中按顺序执行。
【问题讨论】:
-
不应该是
@ClassRule上的static方法吗? -
@M.Deinum 否,因为扩展是参数化的。
-
@Jan:您的
testServer()函数实际上是在启动测试夹具吗?这似乎是错误的。TestRule实现在构造时不应该做任何工作,它应该只是装饰测试语句以添加设置和拆除行为。我怀疑你的WireMockRule启动服务器太早了。 -
@DanielPryden 主要测试夹具在
@BeforeClass setUp()中创建,启动服务器,部署所有耳朵,启动消息队列等。WireMockRule而是捕获生成的 REST 消息并检查它们如果它们符合预期数据,则对应于当前测试的参数。 -
@Jan:好的,但听起来你在抱怨 WireMockRule 在装饰语句时被实例化了多次。这不应该是一个问题,除非 WireMockRule 在实例化时正在工作。相反,它应该推迟工作,直到语句(如果有)被执行。