我使用以下代码在Wiremock中创建一个存根:
getWiremock().stubFor(get(urlMatching("/rs-queue/messages.*"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/json")
.withBody(fromObjectToString(queueMessageItem))
));
我希望这个存根被删除/禁用后,它被调用一次。我没有找到任何例子Wiremock文档。有一个想法,创建一个新的线程,并运行以下代码:
RequestPatternBuilder requestPatternBuilder = postRequestedFor(urlEqualTo(url))
.withRequestBody(new EqualToPattern(fromObjectToString(queueMessageItem)));
Awaitility.waitAtMost(Duration.of(1, ChronoUnit.MINUTES))
.pollInterval(Duration.of(3, ChronoUnit.SECONDS))
.until(() -> {
try {
verify(moreThanOrExactly(1), requestPatternBuilder);
getWiremock().removeStubMapping(stubMapping.getUuid());
} catch (VerificationException exception) {
return false;
}
return true;
});
这种方法看起来很脏,太复杂了,我仍然相信有可能配置wirerock存根后,调用一次自动删除。有什么想法?
1条答案
按热度按时间pw9qyyiw1#
您可以使用
.reset()
或.resetToDefault()
删除添加的存根。WireMock服务器可以在任何时候重置,移除所有存根Map并删除请求日志。如果您正在使用JUnit规则中的任何一个,这将在每个测试用例开始时自动发生。然而,您可以通过调用Java中的WireMock.reset()来自己完成
如果你已经创建了一些基于文件的存根Map在启动时加载,并且你不希望这些Map在你重置时消失,你可以调用WireMock.resetToDefault(
因此,根据您的用例使用
getWireMock().reset()
或getWireMock().resetToDefault()
。此外,您还可以使用
.removeStub()
,在这种情况下,我建议将.stubFor()
声明为变量,以便以后可以更容易地删除它。