将Wiremock集成到Spring Boot Java Web应用程序中以模拟外部依赖关系
介绍
WireMock是用于基于HTTP的API的模拟服务器。 有些人可能会将其视为服务虚拟化工具或模拟服务器。 它使您能够存根所需的API或其他外部依赖项,以加快本地开发速度。 它支持测试真实API无法可靠产生的极端情况和失败模式。 在模拟单元测试和集成测试中的外部依赖关系时,它也很有用。 它与jUnit具有出色的集成。
添加Wiremock依赖性
首先,您将要添加Wiremock依赖项。 您可以下载常规依赖项或包含所有依赖项的胖JAR独立版本。 我们将在此处使用标准依赖项。 将以下依赖项添加到您的build.gradle中
build.gradle
dependencies {testCompile('com.github.tomakehurst:wiremock:2.1.12')
}
添加Wiremock单元测试
这是完整的单元测试,可用于测试与Wiremock的集成。 该单元测试使用jUnit4规则启动端口8089上的Wiremock服务器,并在每次测试后将其关闭。 我们使用stubFor方法来定义模拟的终点和响应。 我们使用Spring RestTemplate创建一个到模拟服务器的HTTP请求并捕获结果。
WiremockTests.java
public class WiremockTests {RestTemplate restTemplate;ResponseEntity response;@Rulepublic WireMockRule wireMockRule = new WireMockRule(wireMockConfig().port(8089).httpsPort(8443));@Beforepublic void setup() throws Exception {restTemplate = new RestTemplate();response = null;}@Testpublic void givenWireMockAdminEndpoint_whenGetWithoutParams_thenVerifyRequest() {RestTemplate restTemplate = new RestTemplate();response = restTemplate.getForEntity("http://localhost:8089/__admin", String.class);assertThat("Verify Response Body", response.getBody().contains("mappings"));assertThat("Verify Status Code", response.getStatusCode().equals(HttpStatus.OK));}@Testpublic void givenWireMockEndpoint_whenGetWithoutParams_thenVerifyRequest() {stubFor(get(urlEqualTo("/api/resource/")).willReturn(aResponse().withStatus(HttpStatus.OK.value()).withHeader("Content-Type", TEXT_PLAIN_VALUE).withBody("test")));response = restTemplate.getForEntity("http://localhost:8089/api/resource/", String.class);assertThat("Verify Response Body", response.getBody().contains("test"));assertThat("Verify Status Code", response.getStatusCode().equals(HttpStatus.OK));verify(getRequestedFor(urlMatching("/api/resource/.*")));}
}
您可以运行此测试,如果完成,则您已成功将Wiremock集成到应用程序中。
深入到单元测试
这是一些静态导入,您可以在测试中使用这些静态导入来提高可读性和简洁性。
WiremockTests.java
import static com.github.tomakehurst.wiremock.client.WireMock.*;
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.springframework.http.MediaType.TEXT_PLAIN_VALUE;
jUnit4规则
这个jUnit4 @rule将自动管理Wiremock服务器的生命周期以及每个测试用例的启动和关闭Wiremock。 您也可以使用setup()和teardown()方法来实现,但是jUnit4规则更加简洁明了。
WiremockTests.java
@Rulepublic WireMockRule wireMockRule = new WireMockRule(wireMockConfig().port(8089).httpsPort(8443));
残端和响应
此代码使用stubFor()方法(已静态导入)定义端点, / api / resource /和纯文本响应主体“ test”。您也可以使用此方法通过更改Content-返回JSON或XML响应。类型和响应主体
WiremockTests.java
stubFor(get(urlEqualTo("/api/resource/")).willReturn(aResponse().withStatus(HttpStatus.OK.value()).withHeader("Content-Type", TEXT_PLAIN_VALUE).withBody("test")));
春天RestTemplate
我们使用Spring RestTemplate类对http:// localhost:8089 / api / resource /执行GET HTTP请求,以打到Wiremock服务器的存根端点。 在这种情况下,我们期望一个String.class实体响应,因为那是我们在stubFor()方法中定义的。 如果您配置了POJO对象,则需要定义一个POJO对象以从存根方法捕获JSON响应。 我们在ResponseEntity对象中捕获响应,该对象捕获响应主体,标头和状态代码以及有关请求的其他信息。
WiremockTests.java
response = restTemplate.getForEntity("http://localhost:8089/api/resource/", String.class);
手动启动和停止Wiremock服务器
您可以手动启动和停止Wiremock服务器,而无需使用jUnit4规则来管理生命周期。 当您的应用程序启动时,您可能希望这样做是一种引导方法。
ServiceClass.java
WireMockServer wireMockServer = new WireMockServer(wireMockConfig().port(8089)); //No-args constructor will start on port 8080, no HTTPS
wireMockServer.start();WireMock.reset();wireMockServer.stop();
结论
现在,您的项目中已安装Wiremock。 您可以在单元测试和集成测试中使用Wiremock来对外部依赖关系进行存根,也可以加快本地环境中的开发。 您可以在此处阅读有关设置Wiremock的更多信息: http ://wiremock.org/docs/getting-started/
翻译自: https://www.javacodegeeks.com/2016/09/integrate-wiremock-spring-boot-java-web-application-mocking-external-dependencies.html
将Wiremock集成到Spring Boot Java Web应用程序中以模拟外部依赖关系相关推荐
- java文件怎么建立关联_如何创建两个Java Web应用程序并相互关联jar依赖关系和其他文件?...
当前,我们有一个用于Web服务的Web应用程序(名为ws-project).它使用另外两个项目: > dao项目(休眠) >核心项目(pojo) ws-project (war) | +- ...
- 使用Hibernate和Spring构建Java Web应用程序
这篇文章将展示如何在Spring环境中使用带有Hibernate ORM的MYSQL DB创建学生注册应用程序. 这是一个简单的应用程序,旨在在注册过程中从用户收集输入详细信息,将这些详细信息保存在M ...
- 使用MyBatis和Spring构建Java Web应用程序
这篇文章将展示如何在Spring环境中使用带有MyBatis框架的MYSQL DB创建学生注册应用程序. 这是一个简单的应用程序,旨在在注册期间从用户收集输入详细信息,将详细信息保存在MYSQL DB ...
- web csrf java_在Java Web应用程序中阻止CSRF
web csrf java 跨站点请求伪造攻击(CSRF)在Web应用程序中非常常见,如果允许,可能会造成重大危害. 如果您从未听说过CSRF,建议您查看有关它的OWASP页面 . 幸运的是,阻止CS ...
- 在Java Web应用程序中阻止CSRF
跨站点请求伪造攻击(CSRF)在Web应用程序中非常常见,如果允许,可能会造成重大危害. 如果您从未听说过CSRF,建议您查看有关它的OWASP页面 . 幸运的是,阻止CSRF攻击非常简单,我将向您展 ...
- 操作方法:具有多个Mongo存储库和Kotlin的Spring Boot 2 Web应用程序
首先,免责声明:如果您正在编写微服务 (每个人现在都对吗?)并希望它是惯用的 ,那么通常不会在其中使用几个不同的数据源. 图片取自Pixabay© https: //pixabay.com/illus ...
- 百家与g对比oogle_如何在Java Web应用程序中集成Google reCAPTCHA
百家与g对比oogle I never liked Captchas because the burden was always on end user to understand the lette ...
- java web里实现 mvc_MVC模式在Java Web应用程序中的实现
一.MVC简介: MVC架构是一个复杂的架构,其实现也显得非常复杂..Views可以看作一棵树,可以用Composite Pattern来实现.Views和Models之间的关系可以Observer ...
- MVC模式 在Java Web应用程序中的实现
一.MVC简介 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分 ...
最新文章
- 网上复制代码需谨慎,莫名其妙报错看这里!
- mysql 对象名无效_如何解决“SQL对象名无效”的问题
- centos7设置成文件服务器,CentOS7服务器架设ftp过程
- 数据可视化----我在寻找一款类似vfp或是access这样自带可视化风格的数据库或是键盘数据库...
- cocos2dx基础篇(2)——Win32移植到Android
- 线程同步 互斥量(mutex) Linux函数
- 本地chrome调试服务器node
- Atitit React的相关概念东东 attilax总结 v3
- 《深度学习的艺术》笔记整理读后感
- jsp text 水印_java实现图片上加文字水印(SpringMVC + Jsp)
- 树结构——2-3树图解
- 如何将资源打包成.unity3d文件
- 科技周刊第五期:科学技术在发展中的作用
- 副驾驶的意义_副驾驶对女人的意义是什么样的?
- scrapy爬取猫眼电影及详情页
- pythonrequest爬取小说_python爬取斗破苍穹小说
- excel2007快捷键
- Echarts模拟迁徙之飞机变小车
- 阿里云服务器挂载云盘
- 趣谈网络协议——P2P协议