mock浅析

Mockito的使用及原理浅析 Mockito的使用及原理浅析 在微服务横行的年代,一个服务可能依赖了若干个其它服务,而这些被依赖的服务,又极可能依赖了别的服务,于是构成了一个复杂的依赖链。而日常开发中,经常会苦恼于某某上游接口没数据而所使得UT达不到预期的目标,所兴现在已经有了多种Mock Toolkit,很好的解决了这一痛点。比较常用的有EasyMock,JMockit,Mockito,PowerMock等,而本文主要介绍Mockito的简单使用,并对其实现原理进行简单分析 Mockito的使用 通常情况下,我们会在UT里使用@Moc 阅读详情

因为今天在牛壳网上刷一道题,看到了mock,不知道是什么,所以写一篇博文。

mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。
mock对象使用范畴
真实对象具有不可确定的行为,产生不可预测的效果,(如:股票行情,天气预报)真实对象很难被创建的 真实对象的某些行为很难被触发真实对象实际上还不存在的(和其他开发小组或者和新的硬件打交道)等等。
使用mock对象测试的关键步骤
使用一个接口来描述这个对象。在产品代码中实现这个接口,在测试代码中实现这个接口,在被测试代码中只是通过接口来引用对象,所以它不知道这个引用的对象是真实对象,还是mock对象。
MockObject
使用Mock Object进行测试,主要是用来模拟那些在应用中不容易构造(如HttpServletRequest必须在Servlet容器中才能构造出来)或者比较复杂的对象(如JDBC中的ResultSet对象)从而使测试顺利进行的工具。
目前,在Java阵营中主要的Mock测试工具有JMock,MockCreator,Mockrunner,EasyMock,MockMaker等,在微软的.Net阵营中主要是Nmock,.NetMock等。


维基百科:Mock通常是指,在测试一个对象A时,我们构造一些假的对象来模拟与A之间的交互,而这些Mock对象的行为是我们事先设定且符合预期。通过这些Mock对象来测试A在正常逻辑,异常逻辑或压力情况下工作是否正常。
引入Mock最大的优势在于:Mock的行为固定,它确保当你访问该Mock的某个方法时总是能够获得一个没有任何逻辑的直接就返回的预期结果。
Mock Object的使用通常会带来以下一些好处:
一. 隔绝其他模块出错引起本模块的测试错误。
二.隔绝其他模块的开发状态,只要定义好接口,不用管他们开发有没有完成。
三.一些速度较慢的操作,可以用Mock Object代替,快速返回。
对于分布式系统的测试,使用Mock Object会有另外两项很重要的收益:
通过Mock Object可以将一些分布式测试转化为本地的测试
其次,将Mock用于压力测试,可以解决测试集群无法模拟线上集群大规模下的压力


Mock的应用场景
在使用Mock的过程中,发现Mock是有一些通用性的,对于一些应用场景,是非常适合使用Mock的:
 真实对象具有不可确定的行为
 真实对象很难被创建(比如具体的web容器)
真实对象的某些行为很难触发(比如网络错误)
真实情况令程序的运行速度很慢
 真实对象有用户界面
 测试需要询问真实对象它是如何被调用的(比如测试可能需要验证某个回调函数是否被调用了)
 真实对象实际上并不存在(当需要和其他开发小组,或者新的硬件系统打交道的时候,这是一个普遍的问题)
当然,也有一些不得不Mock的场景:
一些比较难构造的Object:这类Object通常有很多依赖,在单元测试中构造出这样类通常花费的成本太大。
 执行操作的时间较长Object:有一些Object的操作费时,而被测对象依赖于这一个操作的执行结果,例如大文件写操作,数据的更新等等,出于测试的需求,通常将这类操作进行Mock。
 异常逻辑:一些异常的逻辑往往在正常测试中是很难触发的,通过Mock可以人为的控制触发异常逻辑。
在一些压力测试的场景下,也不得不使用Mock,例如在分布式系统测试中,通常需要测试一些单点(如namenode,jobtracker)在压力场景下的工作是否正常。而通常测试集群在正常逻辑下无法提供足够的压力(主要原因是受限于机器数量),这时候就需要应用Mock去满足。
在这些场景下,我们应该如何去做Mock的工作了,一些现有的Mock工具可以帮助我们进行Mock工作。

由于本人对测试不太理解,也对JAVA不甚理解,故而,推荐一篇博文点击打开链接

还有一篇也可以查考一下点击打开链接

Mockito源码浅析——核心逻辑 一、Mockito源码逻辑简介 Mockito是一个Mock框架,让你用简单干净的API写漂亮的测试代码。Mockito通过ByteBuddy动态字节码生成技术生成mock类型(你要模拟类的代理类),默认通过objenesis框架生成mock类型的对象实例,mock实例对象的所有方法都会调用MockHandlerImpl对象实例的handle方法。 该文章主要从三个部分进行讲解:mock代理对象创建,mock对象方法的打桩,mock对象方法的入参验证。 二、mock代理... 阅读详情

相关推荐

C语言头文件完全解析(连“#”我都给你讲明白)

C语言头文件完全解析 引言 本文将尽量详细的介绍c语言的头文件所包含的知识,如有错误,还望指正。 萌新们肯定疑惑为什么每次打代码都要写一个所谓的头文件(如:#include<stdio.h>),这里先简单让大家有个了解,你所用的 printf("%d",a)就是这个 stdio里的东西,如果没有这个头文件,编译器都不知道 printf是个什么东东。所以头文件就是一个准备好的大仓库,你可...

CRAZY_eyes的博客 7万+

单元测试:Mock对象

为什么要引入mock对象 单元测试的目标是一次只验证一个方法,小步的前进,细粒度的测试,但是假如某个方法依赖于其他一些难以操控的东东,比如说网络连接,数据库连接,或者是Servlet容器,那么我们该怎么办呢? 要是你的测试依赖于系统的其他部分,甚至是系统的多个其他部分呢? 在这种情况下,倘若不小心,你最终可能会发现自己几乎初始化了系统的每个组件,而这只是为了给一个测试创造足够的运行环境让它们可以运行起来。忙乎了大半天,看上去我们好像有点违背了测试的初衷了。这样不仅仅消耗时间,还给测试过程引入了大量的耦合

OceanStar的博客 3621

SAP ABAP实战:如何用CVI_EI_INBOUND_MAIN批量更新BP邮箱(附完整代码)

本文深入解析了SAP ABAP中CVI_EI_INBOUND_MAIN函数在业务伙伴(BP)邮箱地址批量维护场景下的应用。通过详细讲解数据结构构建、关键参数(如任务参数'5')配置及完整代码示例,为开发者提供了一套高效、稳定的批量更新解决方案,并分享了性能优化与错误处理的最佳实践。

weixin_29228781的博客 77

单元测试中使用Mock对象

单元测试中使用Mock对象单元测试中使用Mock对象一、简单的替换二、Mock 对象三、测试 Servlet 单元测试中使用Mock对象 一、简单的替换 假设在代码中,你调用你自己的 getTime () 来返回系统当前的日期和时间 : public long getTime() { return System.currentTimeMillis(); } 通常建议对应用...

姜皓的博客 6932

工程师必看:如何用功率谱密度搞定随机振动测试(附Grms计算实例)

本文为工程师详解如何通过功率谱密度(PSD)曲线计算Grms(总均方根加速度),从而量化随机振动测试的强度。文章拆解了平直谱、斜谱的计算公式,提供了完整的Grms计算实例,并指出了单位换算、对数坐标等常见工程陷阱,帮助工程师精准完成测试准备与设备推力评估。

3c4x5z6v7b的博客 625

【Go语言实战】(2) Gin+Vue 电子商城

618来!!不用纠结去哪里剁手了!直接自己安排一个商场不香吗??

面向生活编程 4827

Mock 对象 详解

Mock 对象 详解

T_Y_F_的博客 1406

华为OD机试 - 去除多余空格(Python/JS/C/C++ 2024 E卷 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。去除文本多余空格,但不去除配对单引号之间的多余空格。给出关键词的起始和结束下标,去除多余空格后刷新关键词的起始和结束下标。条件约束:输入为两行字符串:第一行:待去除多余空格的文本,用例保证如果有单引号,则单引号成对出现,且单引号可能有多对。 第二

学Java,找哪吒 1216

Mock方法介绍

1 现有的单元测试框架 单元测试是保证程序正确性的一种有效的测试手段,对于不同的开发语言,通常都能找到相应的单元框架。 借助于这些单测框架的帮助,能够使得我们编写单元测试用例的过程变得便捷而优雅。框架帮我们提供了case的管理,执行,断言集,运行参数,全局事件工作,所有的这些使得我们只需关注:于对于特定的输入,被测对象的返回是否正常。 那么,这些xUnit系...

weixin_34138056的博客 1047

windows下玩转vllm:在wsl下安装vllm

当前,部署通义千问2.5-vl已经是一件箭在弦上,不得不发的事儿了。网上搜了一下,发现还是用vllm用的比较多。于是乎,这就开始尝试部署vllm。但是我们之前说了,vllm是不支持直接在windows上部署的,我们还得搞wsl或者docker。咱今天先尝试使用wsl进行安装哈。

xiezhipu的博客 4137

NVIDIA Isaac Lab 入门教程(一)

Isaac Lab 是一个用于机器人学习的统一模块化框架,旨在简化机器人研究中的常见工作流程(如 RL、从演示中学习和运动规划)。它建立在英伟达 Isaac Sim 的基础上,利用最新的仿真功能实现逼真的场景和快速高效的仿真。该框架的核心目标是Isaac Lab 的主要功能包括:由 PhysX 提供的快速准确的物理模拟、用于矢量化渲染的平铺渲染 API、用于提高鲁棒性和适应性的域随机化,以及对在云中运行的支持。有关该框架的更多信息,请参阅论文[MYY+23]。

机器人控制与仿真应用 8218

单元测试源码分析之一创建mock对象

之前已经介绍过Mockito和PowerMock的常见用法,PowerMock其实就是在Mockito的基础上使用了字节码技术使得其可以对静态方法,私有方法等进行插桩。 现在就先来看看Mockito是怎么创建一个mock对象的(本文的源码都是来自mockito-core-3.2.0,低版本的底层实现不是ByteBuddy) 先看下一个比较简单的Mockito例子 @Component public class UserDao { public List<User> queryUserB

qq_35448165的博客 2209

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Mock浅析和简单实践

一、背景 某个服务或前端依赖一个服务接口,该接口可能依赖多个低层服务或模块,或第三方接口,这种情况下需要搭建多个底层模块多套测试环境,比较痛苦,如果mock掉第一级的服务接口,可以节约不少人力,同时规避了可能由第三方服务导致的问题。 目前常见服务或接口协议主要两种,一种是RPC,另一种是HTTP/HTTPS,mock原理都类似,要么是修改原服务地址为Mock服务地址,要么是拦截原服务的...

CoberOJ_的博客 1181

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

单元测试中Mock与Stub的浅析

Github Repo mocksArentStubs 本部分主要介绍所谓的Test Double的概念,并且对其中容易被混用的Mocks与Stubs的概念进行一个阐述。在初期接触到的时候,很多人会把Mock对象与另一个单元测试中经常用到的Stub对象搞混掉。为了方便更好地理解,这里把所有的所谓的Test Double的概念进行一个说明。...

weixin_33989058的博客 770

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

单元测试之浅析Mockito mock Kotlin Object类方法

比如我创建一个Kotlin Object类:ObjectMethod package com.baichuan.example.unit_test object ObjectMethod { fun doSomething() { println("this is ObjectMethod#doSomething") } @JvmStatic fun doSomethingWithJvmStatic() { println("this i

scientificCommunity的博客 2050

Android中Mock以及Mockito的使用

学习参考链接:1.Mock框架官网2.Mock以及Mockito的使用3.测试demo下载地址4.Android单元测试之Mockito浅析

stormCoder的博客 6908

GoogleTest, gtest之 EXPECT_CALL,MOCK_METHOD

ON_CALL只定义当一个mock函数被调用时执行什么动作,不会定义任何期望;EXPECT_CALL 不止定义行为,而且定义mock以何种期望的形式被调用(包括被调用的顺序,次数等)。如果不期望mock函数被调用,可与使用EXPECT_CALL(…)),但是在测试程序中却调用了x.Y(…)),但是却没有调用x.Y(…unexpected的调用会报error,但是Uninteresting不是错误,只是一个警告。不感兴趣(Uninteresting)和不期望(Unexpected)的调用的理解。

sun007700的专栏 1091

EASYMOCK原理浅析

EASYMOCK原理浅析 来源:http://shlteater.iteye.com/blog/394191 一、EASYMOCK基本工作方式回顾  首先我们通过一个最基本的例子来回顾一下EASYMOCK的工作方式  我们有一个计算器,里面依赖一个做int加法的加法器  Calculator.java  Java代码   public cl

xymyeah 2544

提升软件测试效率与灵活性:探索Mock测试的重要性

合集 - 经验分享(25)1.记一次由于操作失误致使数据库瘫痪的故障分析与解决方案2023-09-082.网络之谜:记一次失败排查的故事2023-11-153.你是否想知道如何应对高并发?Go语言为你提供了答案!2023-12-294.2023年终总结:拉帮结伙,拼搏探索新机遇2023-12-305.谁说后端不能画出美丽的动图?让我来给大家拜个年!01-296.【10秒开服】幻兽帕鲁全自动部署教程...

weixin_29476755的博客 255

easymock浅析

一、EASYMOCK基本工作方式回顾 首先我们通过一个最基本的例子来回顾一下EASYMOCK的工作方式 我们有一个计算器,里面依赖一个做int加法的加法器 Calculator.java Java代码   public   class  Calculator {              private  Adder adder...

iamweiming的专栏 226

Java8 Lambda.stream.sorted() 方法使用浅析分享

Java8 中Lambda.stream.sorted方法排序的使用

zhuzicc的博客 3890

程序员必看| mockito原理浅析

戳蓝字「TopCoder」关注我们哦!编者注:mockito是一个单测mock框架,上手简单,Java开发人员必备工具~mockito官网:http://mockito....

luoxn28的专栏 4780

powermock源码浅析

一.基本构成 二.初始化过程  通过初始化MockClassLoader并通过该ClassLoader加载配置的@PrepareForTest类,通过javassit修改对应类的字节码,在方法调前加上类似的 Object localObject = MockGateway.methodCall(this, "testFinal", new Object[0], Desc.getParams

烈冬冰夏的博客 2201

mockito junit_mockito原理浅析

mockito是一个单测mock框架,上手简单,mockito官网:http://mockito.org,API文档:http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html,项目源码:https://github.com/mockito/mockito。 mockito基础在写单元测试的过程中,我们往往会遇到要测试的类有很多依赖...

weixin_39989159的博客 471
上一篇: 将二叉搜索树转成要一个排序的双向链表
下一篇: fork()函数解析
Csoul89757
博客等级 码龄10年 34粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值