在每次测试之前或之后,如何使Spring Cloud Contract重设WireMock

时间:2019-03-08 15:28:19

标签: java spring spring-cloud wiremock

我们正在编写一个Spring Boot应用程序,并使用Cloud Contract WireMock支持来存根支持服务。我们的测试类是这样注释的:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@AutoConfigureWireMock(port = 0)
public class Tests...

除了一件事之外,它工作正常:我们发现Spring Cloud在测试之间似乎并未重置WireMock,尤其是删除存根,因此无法正确隔离测试。当然,您可以使用包含@Before的{​​{1}}方法自己完成此操作,但是我们想知道这是否是故意的。是否有我们忽略的选项或必须使用的附加注释?

毕竟,不可能在reset()方法中定义存根,如果总是执行重置操作,存根将不复存在,所以我们想知道有什么理由反对开箱即用吗?

3 个答案:

答案 0 :(得分:1)

可以随时重置WireMock服务器,删除所有存根映射并删除请求日志。如果您使用任何一个JUnit规则,那么它将在每个测试用例开始时自动发生。但是,您可以自己通过Java中的WireMock.reset()调用或向http://<host>:<port>/__admin/reset.

发送带有空主体的POST请求来完成此操作

要仅重置存根映射,使请求日志保持不变,请将DELETE发送到http://<host>:<port>/__admin/mappings.

希望这很有用。

答案 1 :(得分:1)

配置 Spring Boot 属性:

wiremock:
  reset-mappings-after-each-test: true

参考:https://github.com/spring-cloud/spring-cloud-contract/commit/67119e62f6b30da56b06aade87ec3ba61de7fd24

答案 2 :(得分:0)

我最终注入WireMockServer并在@BeforeEach中运行wireMockServer.resetAll()