java 调用一次时删除/禁用线盒存根

6gpjuf90  于 2022-12-25  发布在  Java
关注(0)|答案(1)|浏览(112)

我使用以下代码在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存根后,调用一次自动删除。有什么想法?

pw9qyyiw

pw9qyyiw1#

您可以使用.reset().resetToDefault()删除添加的存根。
WireMock服务器可以在任何时候重置,移除所有存根Map并删除请求日志。如果您正在使用JUnit规则中的任何一个,这将在每个测试用例开始时自动发生。然而,您可以通过调用Java中的WireMock.reset()来自己完成
如果你已经创建了一些基于文件的存根Map在启动时加载,并且你不希望这些Map在你重置时消失,你可以调用WireMock.resetToDefault(
因此,根据您的用例使用getWireMock().reset()getWireMock().resetToDefault()
此外,您还可以使用.removeStub(),在这种情况下,我建议将.stubFor()声明为变量,以便以后可以更容易地删除它。

相关问题