[关闭]
@levinzhang 2023-03-11T14:52:56.000000Z 字数 2200 阅读 387

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

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:

  1. <dependency>
  2. <groupId>com.github.maciejwalkowiak.wiremock-spring-boot</groupId>
  3. <artifactId>wiremock-spring-boot</artifactId>
  4. <version>0.1.0</version>
  5. <scope>test</scope>
  6. </dependency>

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

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

  1. <repositories>
  2. <repository>
  3. <id>jitpack.io</id>
  4. <url>https://jitpack.io</url>
  5. </repository>
  6. </repositories>

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

  1. @SpringBootTest
  2. @EnableWireMock({
  3. @ConfigureWireMock(name = "studentservice", property = "studentservice.url")
  4. })
  5. class StudentControllerTest {
  6. @Autowired
  7. private Environment environment;
  8. @WireMock("studentservice")
  9. private WireMockServer wireMockServer;
  10. @Test
  11. void studentTest() {
  12. environment.getProperty("studentservice.url");
  13. wireMockServer.stubFor(get(urlEqualTo("/student"))
  14. }
  15. }

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

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

  1. @ConfigureWireMock(extensions = { }, …)

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

  1. @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

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注