SpringBoot框架Mockito的使用
创始人
2024-01-21 12:00:28
0

SpringBoot框架Mockito的使用

一、简介

mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。 在具体的测试过程中,我们经常会碰到需要模拟数据或者接口的情况,因为环境问题或者系统复杂度的问题,我们需要使用 Mock 方式进行数据的模拟。

二、应用场景

  • 对象信息难构建:在测试过程中,需要第三方接口返回特定的数据以符合特定的测试场景,这种情况往往需要跨条线的沟通协调测试数据,成本高,效率低;利用Mock可以自定义返回测试结果,支持手动构造依赖接口的返回值。
  • 依赖的接口尚未开发完成:依赖接口性能参数无法保障。在对接口性能压测的时候,需要下游接口及时返回数据,满足上游接口的调用 频度。在依赖接口多的情况下,如何减轻工作量?
  • 异常场景(连接异常、超时异常等):当需要测试接口一些异常数据,接口正常情况是否无法提供异常数据的。那么如何简便地构造接口的异常数据

三、使用

Mockito框架是单元测试处理bean依赖注入的一大利器

创建SpringBoot项目,版本为:2.3.7.RELEASE

假设有两个服务分别是OrderService和UserService,OrderService的服务因为某种原因调用不了,而我们又要通过UserService来调用OrderService,又不想改变UserService方法里面的逻辑,我们可以通过Mockito模拟OrderService返回来的数据。

创建OrderService和UserService接口

public interface UserService {String getUser();
}
public interface OrderService {String getOrder(Long id);
}
@Service
public class OrderServiceImpl implements OrderService {@Overridepublic String getOrder(Long id){return id+"";}
}

创建UserServiceImpl实现,从实现里看出,需要调用OrderService里的getOrder方法,但是我们还没有这个方法的实现,或者有时候有实现调用不了

@Service
public class UserServiceImpl implements UserService {@Autowiredprivate OrderService orderService;@Overridepublic String getUser(){String order = orderService.getOrder(1L);return "name is zs,orderNum is"+order;}
}

在测试类中写如下代码

import cn.amoqi.cloud.mocktest.service.OrderService;
import cn.amoqi.cloud.mocktest.service.UserService;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.util.Assert;
import static org.mockito.ArgumentMatchers.any;@SpringBootTest
class MockTestApplicationTests {@Autowiredprivate UserService userService;@MockBeanprivate OrderService orderService;@Testvoid contextLoads() {Mockito.when(orderService.getOrder(any(Long.class))).thenReturn("5");String user = userService.getUser();System.out.println(user);Assert.isTrue("name is zs,orderNum is5".equals(user),"用户信息不正确");}
}

执行测试方法,就会发现调用orderService.getOrder方法执行被替换成有结果的值 5了,我们并没有实现OrderService,也没有报错

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...