当前位置: 首页 > news >正文

单元测试进阶-Mock使用和插桩

目录

一、基本概念

1、Mock

2、插桩(Sutbbing)

二、参考文章


一、基本概念

1、Mock

Mock的作用就是不直接new对象,而是使用Mock方法或者注解Mock一个对象。

这个对象他不是new创建的对象,Mock对该对象的一些成员变量和方法等等进行了注入,可以配合插桩直接调用其他方法而不用管对象内部是如何赋值、如何初始化等等问题。

比如TpBaseService类,它有一个getService方法,作用是获取服务。在我的单元测试中,我需要使用TpBaseService类的对象去调用getService方法。

①常规做法

常规的单元测试是通过New一个TpBaseService类的对象,这里假设为tpBaseService去调用getService方法。

②Mock做法

但假如getService方法需要一些私有的成员变量输入,比如一个context参数,这个参数是TpBaseService类的私有成员变量,当我使用常规单元测试去New对象时,我需要考虑到这个context私有成员变量的值。但如果我使用Mock对象,就可以省略去这一步骤。

2、插桩(Sutbbing)

插桩就是在Mock的前提下,对某个方法进行黑盒控制。

也就是说,我给出输入和输出,在Mock的前提下对某个方法使用插桩后,不需要考虑这个方法内部是怎么实现的,直接给出输入就返回我需要的输出,就像一个黑盒一样。甚至,可以实现抛出异常(我想抛就抛,想正常输出就输出)

从直观感受来说,插桩就是像是直接跳过了一条“无法执行”的语句(这条语句通常是调用了外系统接口或者是使用了数据库方法)

二、参考文章

Mock和插桩的基本使用,有很多例子:

【码农教程】手把手教你Mockito的使用_mockito教程-CSDN博客

给出了插桩的基本语句,例子更直观:

单元测试框架——Mockito之stubbing语法_单元测试stubbing-CSDN博客

若有读者需要更加详细的解释,可以后面再出一篇详细文章说明Mock和插桩的语法和使用等等

另外,以上提到的Mockito接口一般是针对public方法和protected方法, PowerMockito可以对私有方法、静态方法甚至是构造器进行Mock,有兴趣可以自己去了解

相关文章:

单元测试进阶-Mock使用和插桩

目录 一、基本概念 1、Mock 2、插桩(Sutbbing) 二、参考文章 一、基本概念 1、Mock Mock的作用就是不直接new对象,而是使用Mock方法或者注解Mock一个对象。 这个对象他不是new创建的对象,Mock对该对象的一些成员变量和方法…...

适用conda安装虚拟的python3环境

由于jupyter notebook 7以上的版本与jupyter_contrib_nbextensions存在冲突,导致以前使用顺手的插件无法使用了,就考虑建立一个虚拟环境,在里面使用jupyter notebook 6,以便和jupyter_contrib_nbextensions兼容。 conda简介和优势 Conda 是一个包管理器和环境管理器,它不…...

【C++】“list”的介绍和常用接口的模拟实现

【C】“list”的介绍和常用接口的模拟实现 一. list的介绍1. list常见的重要接口2. list的迭代器失效 二. list常用接口的模拟实现(含注释)三. list与vector的对比 一. list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xf…...

第九篇——数列和级数(二):传销骗局的数学原理

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 文章不长,但是道理深刻;相邻两个数的差值&#xf…...

docker如何查看容器的ip

要查看Docker容器的IP地址&#xff0c;可以使用以下几种方法&#xff1a; 使用docker inspect命令&#xff1a; docker inspect -f {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} <容器ID或名称> 使用docker ps和docker inspect组合&#xff1a; 首先查看正…...

Mysql ONLY_FULL_GROUP_BY模式详解、group by非查询字段报错

文章目录 一、问题报错二、ONLY_FULL_GROUP_BY模式2.1、什么是ONLY_FULL_GROUP_BY&#xff1f;2.2、为什么要使用ONLY_FULL_GROUP_BY&#xff1f;2.3、查看sql_mode 三、解决方法3.1、关闭only_full_group_by模式3.1.1、方法一&#xff1a;关闭当前会话中的only_full_group_by3…...

设计模式(2)工厂模式

让一个工厂类去生产出对象 &#xff08;new &#xff09;来。 我们想要一个 形状&#xff0c;我们用工厂去生产出&#xff0c;圆形&#xff0c;方形。 package com.example.factory2;public interface Shape {void draw(); }public class Square implements Shape {Overridep…...

二分查找算法专题(1)

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a; 优选算法专题 目录 二分查找算法的介绍 704. 二分查找 34. 在排序数组中查找元素的第一个和 最后一个位置 35. 搜索插入位置 69. x的平…...

ACP科普:SoS不是救命

Scrum of Scrums&#xff08;SoS&#xff09;是一种用于协调多个Scrum团队之间工作的扩展框架&#xff0c;特别适用于大型项目或组织中有多个团队同时进行开发的情况。它帮助团队在保持敏捷性的同时&#xff0c;解决跨团队的依赖和协调问题。以下是对Scrum of Scrums的详细介绍…...

C++:模拟实现vector

目录 成员变量与迭代器 size capacity empty 迭代器有关函数 实现默认成员函数的前置准备 reserve ​编辑 ​编辑 push_back 构造函数 无参构造 迭代器区间构造 n个val来进行构造 析构函数 拷贝构造函数 赋值重载 增删查改 clear resize pop_back inser…...

Leecode SQL 184. Department Highest Salary 找出tie

Department Highest Salary 注意&#xff01;要找出 tie 的 highest salary&#xff01; Write a solution to find employees who have the highest salary in each of the departments. Return the result table in any order. The result format is in the following ex…...

[Redis][典型运用][缓存]详细讲解

目录 0.什么是缓存&#xff1f;1.使用Redis作为缓存1.为什么用&#xff1f;2.如何用&#xff1f; 2.缓存的更新策略0.前言1.定期生成2.实时生成 3.缓存相关问题1.缓存预热(Cache Preheating)2.缓存穿透(Cache Penetration)3.缓存雪崩(Cache Avalanche)4.缓存击穿(Cache Breakdo…...

GPG error golang 1.19

1. 问题描述及原因分析 在飞腾2000的服务器&#xff0c;OS为Kylin Linux Advanced Server release V10环境下&#xff0c;docker版本为18.09.0&#xff08;docker-engine-18.09.0-101.ky10.aarch64&#xff09;&#xff0c;基于容器镜像golang:1.19编译新的容器镜像&#xff0…...

Linux如何查看每个文件及文件夹的大小

查看当前目录下每个文件夹的大小&#xff0c;包括其内部所有文件&#xff1a; du -sh *-s&#xff1a;仅显示每个文件夹的总大小&#xff0c;而不是每个文件。-h&#xff1a;以人类可读的格式显示。...

Word样式的同步与重置

有时候我们需要修改Word中的样式&#xff0c;实现排版的个性化。 如何同步样式到其他电脑上&#xff1f; Word中的样式是由Normal.dotm文件控制的&#xff0c;对样式所有的设置和修改&#xff0c;都会保存到这个问题件中&#xff0c;所以我们只需要在设置好样式以后&#xff…...

力扣 —— 跳跃游戏

题目一(中等) 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&…...

SOCKS5代理和HTTP代理哪个快?深度解析两者的速度差异

在现代互联网环境中&#xff0c;使用代理IP已经成为了许多人日常生活和工作的必备工具。无论是为了保护隐私&#xff0c;还是为了访问某些特定资源&#xff0c;代理IP都扮演着重要的角色。今天&#xff0c;我们就来聊聊SOCKS5代理和HTTP代理&#xff0c;看看这两者到底哪个更快…...

工具介绍---效率高+实用

Visual Studio Code (VS Code) 功能特点&#xff1a; 智能代码提示&#xff1a;内置的智能代码提示功能可以自动完成函数、变量等的输入&#xff0c;提高代码编写速度。插件丰富&#xff1a;支持成千上万的扩展插件&#xff0c;例如代码片段、主题、Linting等&#xff0c;能够…...

本地部署开源在线PPT制作与演示应用PPTist并实现异地远程使用

文章目录 前言1. 本地安装PPTist2. PPTist 使用介绍3. 安装Cpolar内网穿透4. 配置公网地址5. 配置固定公网地址 前言 本文主要介绍如何在Windows系统环境本地部署开源在线演示文稿应用PPTist&#xff0c;并结合cpolar内网穿透工具实现随时随地远程访问与使用该项目。 PPTist …...

leetcode_238:除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂…...

Qwen2.5-VL-7B-Instruct实战教程:如何将截图中的UI设计精准还原为可运行HTML+CSS

Qwen2.5-VL-7B-Instruct实战教程&#xff1a;如何将截图中的UI设计精准还原为可运行HTMLCSS 1. 工具简介与环境准备 Qwen2.5-VL-7B-Instruct是一个专门针对RTX 4090显卡优化的多模态大模型工具&#xff0c;它能看懂图片内容并生成相应的代码。想象一下&#xff0c;你只需要给…...

GPIO输入模式深度解析:STM32按键检测中IDR寄存器的使用技巧与常见问题

STM32 GPIO输入模式实战&#xff1a;从IDR寄存器到工业级按键检测方案 在嵌入式开发中&#xff0c;GPIO输入模式是实现人机交互的基础功能之一。对于STM32开发者而言&#xff0c;深入理解IDR寄存器的工作原理和按键检测的实现技巧&#xff0c;往往决定着产品交互的可靠性和响应…...

超实用的三角高程观测记录及平差计算表格程序

三角高程观测记录及平差计算表格程序:通过给出的高程点的坐标&#xff08;边长&#xff09;和高程&#xff0c;只要填写点号&#xff0c;就能实现自动反向计算测量过程&#xff0c;并自动生成四个测回的观测记录。 非常实用方便&#xff0c;表格界面简洁&#xff0c;通用&#…...

GoodbyeDPI完全上手指南:从架构到实操的进阶之路

GoodbyeDPI完全上手指南&#xff1a;从架构到实操的进阶之路 【免费下载链接】GoodbyeDPI GoodbyeDPI — Deep Packet Inspection circumvention utility (for Windows) 项目地址: https://gitcode.com/GitHub_Trending/go/GoodbyeDPI 开源项目使用涉及对项目结构的深入…...

Linux字符设备驱动开发与核心架构解析

Linux字符设备驱动开发深度解析1. Linux设备驱动分类与架构Linux内核将设备驱动分为三大类型&#xff1a;字符设备驱动&#xff1a;以字节流形式进行数据读写&#xff0c;如串口、键盘等块设备驱动&#xff1a;以固定大小数据块为单位进行操作&#xff0c;如硬盘、U盘等网络设备…...

TranslucentTB:打造高效透明任务栏的终极指南

TranslucentTB&#xff1a;打造高效透明任务栏的终极指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB TranslucentTB 是一款专为 Wind…...

如何用 AI + OpenSpec 驱动团队迭代开发

一个真实的痛点你是否遇到过这样的场景&#xff1a;写个正则表达式&#xff1f;AI 秒杀我。写个独立脚本&#xff1f;AI 真香。写个炫酷网页&#xff1f;AI 真牛 X&#xff01;但是一旦将 AI 扔进一个庞大的微服务项目里&#xff0c;它似乎立刻降智为了“新手小白”&#xff1f…...

手把手教你理解永磁同步电机的Clark与Park变换(附MATLAB仿真代码)

手把手教你理解永磁同步电机的Clark与Park变换&#xff08;附MATLAB仿真代码&#xff09; 在工业自动化与电动汽车驱动领域&#xff0c;永磁同步电机&#xff08;PMSM&#xff09;凭借其高功率密度和卓越的动态性能&#xff0c;已成为现代运动控制系统的核心部件。然而&#xf…...

SDMatte透明PNG元数据规范:EXIF/IPTC嵌入、版权信息自动写入功能

SDMatte透明PNG元数据规范&#xff1a;EXIF/IPTC嵌入、版权信息自动写入功能 1. 产品概述 SDMatte 是一款面向高质量图像抠图场景的 AI 模型&#xff0c;特别适合处理主体分离、透明物体提取、边缘精修、商品图去背景等任务。该模型对玻璃、薄纱、羽毛、叶片等边缘细节复杂或…...

SDMatte镜像轻量化:去除冗余依赖、多阶段构建、镜像体积压缩至3.2GB

SDMatte镜像轻量化&#xff1a;去除冗余依赖、多阶段构建、镜像体积压缩至3.2GB 1. 项目背景与挑战 SDMatte是一款面向高质量图像抠图的AI模型&#xff0c;特别擅长处理复杂边缘和半透明物体的抠图任务。在电商、设计、内容创作等领域有着广泛的应用场景。然而&#xff0c;原…...