SpringBoot框架Mockito的使用

news2025/7/22 14:03:23

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 {
    @Override
    public String getOrder(Long id){
        return id+"";
    }
}

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

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private OrderService orderService;

    @Override
    public 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 {
    @Autowired
    private UserService userService;
    @MockBean
    private OrderService orderService;

    @Test
    void 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,也没有报错

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/7708.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

线性模型(穷举法实现)

参考视频:2.线性模型_哔哩哔哩_bilibili 参考视频中实现ywxywxywx 的代码,在加上偏置b后实现 ywxbywxbywxb 的线性模型 假设我们有这样一个线性模型:ywxbywxbywxb X和Y对应的数据如下 XY1.05.02.08.03.011.04.0? 预测值&#x…

开源知识付费APP代码分析

如今,传统的学校已经不能满足大众多元化的需求,各种教育培训机构落地生根。随着时间的推移,互联网与传统教育的结合也开拓了一种新的教育方式,这就是广为人知的知识付费。在线教育的突然崛起多半是因为疫情的“催化”,…

OceanBase 4.0 - 从分布式到单机,从单机到分布式

近些年国产化数据库如雨后春笋般冒出并遍地开花。据某技术平台不完全统计,国产化数据库(见图 )已达 200余个,对于这些数据库的名字,即使作为多年数据库从业者的我,也有很多是第一次听说。在这竞争激烈的数据…

FFplay文档解读-49-多媒体过滤器三

32.14 sendcmd, asendcmd 将命令发送到filtergraph中的过滤器。 这些过滤器读取要发送到filtergraph中其他过滤器的命令。 必须在两个视频滤镜之间插入sendcmd,必须在两个音频滤镜之间插入asendcmd,但除此之外,它们的行为方式相同。 可以…

[附源码]java毕业设计基于的高校学生考勤管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

vue中tinymce的使用

1.下载 npm i tinymce5.10.3 tinymce/tinymce-vue3.2.8 -S2.在node_modules中找到 (我这里是vue2,vue3不是写在public下,具体的可以搜搜 看看) 3.在public中新建 tinymce 文件夹 把三个文件复制进去 4.在components文件夹中新建…

Unity架构之详解域重新加载和场景重新加载

一、unity进入运行模式包括以下主要阶段 备份当前场景:这仅在场景被修改后发生。这样当退出运行模式时,Unity 将场景恢复为运行模式开始前的状态。Domain Reload:通过重新加载脚本域来重置脚本状态。Scene Reload:通过重新加载场…

h264编码算法流程

xh264编解码: 编码层:视频压缩解压缩等核心算法,VLC就是这一系列算法,得到的是编码后的比特序列,即VLC数据。 网络抽象层:将压缩后的原始码流拼接头信息用于解码时来识别,安排格式以方便后续的…

APT 注解处理器如何实现Lombok的常用注解功能?带你完整解析

1 背景 在开发中我们常常会用到类似 lombok 、mapstruct 或者 mybatisplus 的框架,只要加入几个注解即可生成对应的方法,既然被很多框架使用,了解其中的原理还是非常有必要的。 2 生成字节码原理 2.1 APT(Annotation Processing Tool )注解…

【论文笔记】用于几何匹配的卷积神经网络结构(CNN for Geometric Matching)

用于几何匹配的卷积神经网络结构(CNN for Geometric Matching) 文章目录AbstractCNNRelated WorkArchitecture for Geometric Matching特征提取:Matching Networkcorrelation-layer归一化:Regression NetworkGeometric TransformationsAffine Transforma…

正大杯市场调查与分析大赛|赛前准备 持续更新ing

目录 1.随机化实验 1.1背景 1.2操作 1.3作用 平衡协变量 克服选择偏差 1.4分类 完全随机化实验 分层随机化实验 配对随机化实验 1.5分层随机化 1.6缺陷 2.均值、中位数、分割点、游程数 ​3. 什么是系统抽样 4.F大于临界值说明什么 5.德宾—沃森(DW)统计量[Dur…

webpack5 CssMinimizerPlugin css压缩

CssMinimizerWebpackPlugin | webpack 中文文档webpack 是一个模块打包器。它的主要目标是将 JavaScript 文件打包在一起,打包后的文件用于在浏览器中使用,但它也能够胜任转换(transform)、打包(bundle)或包…

动态修改el-input样式;动态修改elmentUI元素样式;css变量

场景:正常我们动态修改div元素的样式,使用:style和:class即可;但是我们想要动态修改element的组件样式时候,例如el-input字体颜色,由于el-input的样式嵌套很深,我们需要修改的实际是.el-input__inner这个样…

强强合作,替代钉盘/微盘,企业实现低成本扩容

后疫情时代,远程办公不断推动协同办公软件快速发展,协同办公软件活跃度保持增长,无疑不反应出企业对对此类办公产品的喜欢,并保持深度使用。 客户的需求和选择也不是一成不变的,完美日记曾经是企业微信的重点客户&…

【附源码】计算机毕业设计JAVA互联网保险网站

项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis Maven Vue 等等组成,B/…

9类人事管理场景应用,泛微协助HR释放更多工作量

人事管理数字化是大势所趋: 组织处在不断发展变化的大环境之中,竞争格外激烈,人力资源日益成为组织竞争优势的关键所在。改变传统人事管理模式,推进人事管理数字化变革,把传统的人事管理事务统一到一个平台&#xff0…

从零到一掌握 Docker 的基本原理与实践操作

富 Web 时代,应用变得越来越强大,与此同时也越来越复杂。集群部署、隔离环境、灰度发布以及动态扩容缺一不可,而容器化则成为中间的必要桥梁。本文我们就来探索Docker的神秘世界,从零到一掌握 Docker 的基本原理与实践操作,是时候该开疆扩土啦。 讲个故事 为了更好的理解 …

【BSC】使用Python实现PancakeSwap自动交易(入门篇)

需求 最近我们需要在BSC上实现代币的自动化交易,比如自动把BNB兑换成USDT,自动把USDT兑换成CAKE等其它代币,同时也要监视价格,在价格合适的时候再兑换代币。而PancakeSwap正是BSC上最大的去中心化交易平台,我们已经学…

2022行情变了,请各位做好一年内随时失业的准备

前两天跟一个HR朋友聊天,她表示刚在boss上发布了一个普通测试岗位,不到一小时竟然收到了几百份简历。而且简历质量极高,这是往年不敢想象的。岗位少,竞争激烈,这是今年软件测试就业的真实写照,也是所有岗位…

【附源码】计算机毕业设计JAVA畜牧场信息管理系统

【附源码】计算机毕业设计JAVA畜牧场信息管理系统 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JAVA …