WireMock Spring Boot 将简化 Spring Boot 应用的 WireMock 配置

257 阅读1分钟

目前,Maven Central 仓库中还没有提供这个依赖,但是可以通过 Git 的JitPack包仓库来使用它。在第一次请求时,JitPack 会从 Git 仓库下载代码,并构建代码以提供构建制品(artifact),比如 JAR 文件。如果想了解更多信息的话,请参阅 JitPack 的文档

在制品发布到 Maven Central 仓库之前,我们应该在_pom.xml_中添加如下的 JitPack 仓库:

<repositories>    <repository>        <id>jitpack.io</id>        <url>https://jitpack.io</url>    </repository></repositories>

使用@SpringBootTest注解的测试,以及其他使用SpringExtension类的注解测试,可以使用 @EnableWireMock注解进行标注,该注解会启用WireMockSpringExtension并添加测试上下文定制器。我们可以使用@ConfigureWireMock来配置 mock,它会创建一个WireMockServer,并使用**property**指定的名称来作为环境属性的名称,这样的环境属性可以用来检索 WireMockServer:

@SpringBootTest@EnableWireMock({        @ConfigureWireMock(name = "studentservice", property = "studentservice.url")})class StudentControllerTest {    @Autowired    private Environment environment;
    @WireMock("studentservice")    private WireMockServer wireMockServer;
    @Test    void studentTest() {        environment.getProperty("studentservice.url");        wireMockServer.stubFor(get(urlEqualTo("/student"))            …
    }}

在上述的样例中,我们使用**environment.getProperty("studentservice.url")方法来检索WireMockServer**实例的 URL。

WireMock扩展可以通过配置注解中的**extensions**参数进行配置:

@ConfigureWireMock(extensions = { … }, …)

默认情况下,包含映射文件的 classpath 目录会被设置为_wiremock/{server-name}/mappings_,但是也可以通过配置注解中的**stubLocation**参数进行变更:

@ConfigureWireMock(stubLocation = "customLocation", …)

相对于Spring Cloud Contract WireMock,WireMock Spring Boot 的优势在于自动设置的 Spring 属性和多个 **WireMockServer**实例的声明式配置。但是, Spring Cloud Contract WireMock支持契约测试、REST 文档以及其他的特性。

WireMock Spring Boot 使用了 Spring Cloud Contract WireMock 和Spring Boot WireMock项目以及“使用WireMock和JUnit 5进行Spring Boot集成测试”这篇文章的概念和想法。关于该项目的更多信息,可以在GitHub上找到。