@levinzhang
2023-03-11T14:52:56.000000Z
字数 2200
阅读 407
by
WireMock是一个构建API mock的灵活工具,新的WireMock Spring Boot简化了Spring Boot应用中基于JUnit的集成测试的WireMock配置。
WireMock是一个构建API mock的灵活工具,新的WireMock Spring Boot简化了Spring Boot应用中基于JUnit的集成测试的WireMock配置。
Maciej Walkowiak是一位自由职业的架构师和开发者,他在2023年2月发布了第一个版本WireMock Spring Boot。该项目会自动配置Spring环境属性,并提供一个完全声明式的WireMock设置。另外,还可以使用多个WireMockServer实例,每个HTTP客户端对应一个实例。最近,这个新的工具不会向Spring应用上下文中发布额外的bean,但是会将它们保存在于应用上下文关联的独立存储中。
添加如下Maven依赖之后就可以使用WireMock Spring Boot:
<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仓库中还没有提供这个依赖,但是可以通过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上找到。
查看英文原文:WireMock Spring Boot Simplifies the WireMock Configuration for Spring Boot Applications