网站首页 > 技术文章 正文
一、什么是Mockito
Mockito是一款用于java开发的mock测试框架,用于快速创建和配置mock对象。通过创建外部依赖的 Mock 对象, 然后将此 Mock 对象注入到测试类中,简化有外部依赖的类的测试。
假设我们需要对一个发奖系统服务做单元测试,服务的依赖关系如下:
为了完成RewardService的测试,我们需要去构建真实的DBService, CouponService, MemberService, 整个过程很长,涉及多个服务,数据构造工作比较繁琐困难。
这个时候,更简单快捷的方式就是通过mock的方式将依赖的服务使用虚拟的对象(即Mock的对象)来替代,直接mock出我们想要的数据来进行测试,方便快捷, 不需要关注那些的复杂的依赖了:
二、在springboot中使用Mockito
2.1 引入maven依赖
在项目pom.xml中引入依赖spring-boot-starter-test,内部就依赖了Mockito。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
2.2 关键代码解析
1、添加注解,mock服务
//mockito注解, 用于启用Spring和Mockito
@TestExecutionListeners(listeners = MockitoTestExecutionListener.class)
public class RewardServiceTestMock{
//通过@MockBean注解,将TaskDubboService服务给mock掉
@MockBean
private RewardDubboService rewardDubboService;
首先,必须加这一行:@TestExecutionListeners(listeners = MockitoTestExecutionListener.class) ,用于启用Spring和Mockito,之前研究了半天用不起,报空指针,就是没有加这一行。
然后使用注解:@MockBean,把这个服务给mock掉。
2、mock接口返回内容
//mock接口返回内容
String msg1="[{\"class\":\"com.xxxx.RewardInfo\",\"rewardCount\":1,\"rewardName\":\"Mock请求1返回的奖励内容\"}]";
String msg1=xxxxxx, 这是定义你的接口返回内容。由于这个接口返回的内容是一个对象类型,所以还需要下面这句代码把String内容转换成指定的对象类型:
List<RewardInfo> mockResult1= JSONArray.parseArray(msg1,RewardInfo.class);
3、设置mock规则
Mockito.when(rewardDubboService.reward(ParamContext)).thenReturn(mockResult1);
表示当调用rewardService.reward(ParamContext)接口时,将接口的返回内容mock为之前定义的mockResult1的内容。
4、 调用接口
List<RewardInfo> result = rewardDubboService.reward(ParamContext);
String resultStr = JSONObject.toJSONString(result);
整体代码如下:
//mockito注解, 用于启用Spring和Mockito
@TestExecutionListeners(listeners = MockitoTestExecutionListener.class)
public class RewardServiceTestMock{
//通过@MockBean注解,将TaskDubboService服务给mock掉
@MockBean
private RewardDubboService rewardDubboService;
//mock接口返回内容
String msg1="[{\"class\":\"com.xxxx.RewardInfo\",\"rewardCount\":1,\"rewardName\":\"Mock请求1返回的奖励内容\"}]";
//把String内容转换成指定的对象类型
List<RewardInfo> mockResult1= JSONArray.parseArray(msg1,RewardInfo.class);
//设置mock规则
Mockito.when(rewardDubboService.reward(ParamContext)).thenReturn(mockResult1);
//调用接口
List<RewardInfo> result = rewardDubboService.reward(ParamContext);
String resultStr = JSONObject.toJSONString(result);
测试结果:
以上就是本次的全部内容,如果对你有帮助,欢迎关注我的微信公众号:程序员杨叔,各类文章都会第一时间在上面发布,持续分享全栈测试知识干货,你的支持就是作者更新最大的动力~
猜你喜欢
- 2024-10-17 使用 Spock 编写高效简洁的单元测试
- 2024-10-17 程序员有福了!万字长文带你掌握SpringBoot所提供的测试解决方案
- 2024-10-17 如何使用Spring Boot提供的测试工具和注解。
- 2024-10-17 单元测试实践(Spring-boot+Junbit5+Mockito)
- 2024-10-17 Spring云原生实战指南:8 弹性和可扩展性
- 2024-10-17 SpringBoot 太强了,这些优势你需要了解
- 2024-10-17 如何使用Spring Cloud Contract(如何使用朋友的山姆卡)
- 2024-10-17 Spring Boot 开发离不开这些注解,快来学习啦!
- 2024-10-17 Spring Boot中文参考指南46.3.11、自动配置的Spring WebFlux测试
- 2024-10-17 一台不容错过的Java单元测试代码“永动机”
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)