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 WireMock 和 Spring Boot WireMock 项目的概念和思路,并参考了相关文章。更多关于该项目的详细信息可以在 GitHub 上找到。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。