WireMock Spring Boot 简化了 Spring Boot 应用程序的 WireMock 配置

WireMock Spring Boot 工具简介

WireMock 是一个灵活的 API 模拟工具,而新发布的 WireMock Spring Boot 工具则简化了在 Spring Boot 应用中使用 WireMock 进行基于 JUnit 的集成测试的配置。

项目背景与发布

Maciej Walkowiak,一名自由架构师和开发者,于 2023 年 2 月发布了 WireMock Spring Boot 的第一个版本。该工具能够自动配置 Spring 环境属性,并提供完全声明式的 WireMock 设置。它支持多个 WireMockServer 实例,每个 HTTP 客户端可以对应一个实例。此外,该工具不会将额外的 Bean 发布到 Spring 应用上下文中,而是将它们存储在与应用上下文关联的单独存储中。

使用方法

要在项目中使用 WireMock Spring Boot,首先需要在 Maven 中添加以下依赖:

<dependency>
    <groupId>com.github.maciejwalkowiak.wiremock-spring-boot</groupId>
    <artifactId>wiremock-spring-boot</artifactId>
    <version>0.1.0</version>
    <scope>test</scope>
</dependency>

目前,该依赖尚未发布到 Maven Central,但可以通过 JitPack 包仓库使用。JitPack 会在首次请求时从 Git 仓库下载代码并构建以提供构建产物(如 JAR 文件)。需要在 pom.xml 中配置 JitPack 仓库:

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

注解与配置

在使用 @SpringBootTest 或其他使用 SpringExtension 类的测试中,可以通过 @EnableWireMock 注解启用 WireMockSpringExtension,并添加测试上下文定制器。使用 @ConfigureWireMock 注解可以创建 WireMockServer,并通过指定的 property 名称作为环境属性来获取 WireMockServer 的 URL。

@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"))
            …
    }
}

扩展与自定义配置

WireMock 扩展可以通过 @ConfigureWireMock 注解的 extensions 参数进行配置。默认情况下,映射文件的类路径目录为 wiremock/{server-name}/mappings,但可以通过 stubLocation 参数进行自定义配置。

@ConfigureWireMock(extensions = { … }, …)
@ConfigureWireMock(stubLocation = "customLocation", …)

与其他工具的比较

Spring Cloud Contract WireMock 相比,WireMock Spring Boot 的优势在于自动配置 Spring 属性和声明式配置多个 WireMockServer 实例。然而,Spring Cloud Contract WireMock 支持契约测试、REST 文档等功能。

项目灵感与更多信息

WireMock Spring Boot 借鉴了 Spring Cloud Contract WireMockSpring Boot WireMock 项目的概念和思路,并参考了相关文章。更多关于该项目的详细信息可以在 GitHub 上找到。

阅读 66
0 条评论