Mockito3.8 如何mock静态方法 (如何mock PageHelper)
项目中遇到需要mock PageHelper,因为用到了startPage方法,而此方法是静态方法,如果需要mock静态方法,网上说法比较多的都是需要用Powermock,而这就需要引入新的依赖,这样的话就比较臃肿了,那如何不引入新依赖,百搜不得其解,那如何解决这个问题呢?经过排查思考,如下。
- 升级org.mockito版本至3.8.0(3.4.0之前的版本不支持mock静态方法)
<dependency><groupId>org.mockito</groupId><artifactId>mockito-junit-jupiter</artifactId><version>3.8.0</version><scope>test</scope></dependency><dependency><groupId>org.mockito</groupId><artifactId>mockito-core</artifactId><version>3.8.0</version><scope>test</scope></dependency><dependency><groupId>org.mockito</groupId><artifactId>mockito-inline</artifactId><version>3.8.0</version><scope>test</scope></dependency>
然后你就兴高采烈的去mock PageHelper了,如下面这样
Page<Plan> planPage = new Page<>();MockedStatic<PageHelper> pageMethodMock = mockStatic(PageHelper.class);pageMethodMock.when(()->PageHelper.startPage(anyInt(),anyInt())).thenReturn(planPage);
你就会发现会抱这样的错
rg.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Misplaced or misused argument matcher detected here:-> at so.dian.leto.service.PlanServiceTest.lambda$paging$0(PlanServiceTest.java:143)
-> at so.dian.leto.service.PlanServiceTest.lambda$paging$0(PlanServiceTest.java:143)You cannot use argument matchers outside of verification or stubbing.
Examples of correct usage of argument matchers:
when(mock.get(anyInt())).thenReturn(null);
doThrow(new RuntimeException()).when(mock).someVoidMethod(anyObject());
verify(mock).someMethod(contains("foo"))This message may appear after an NullPointerException if the last matcher is returning an object
like any() but the stubbed method signature expect a primitive argument, in this case,
use primitive alternatives.
when(mock.get(any())); // bad use, will raise NPE
when(mock.get(anyInt())); // correct usage use
而正确做法应该是这样
MockedStatic<PageMethod> pageMethodMock = mockStatic(PageMethod.class);pageMethodMock.when(()->PageHelper.startPage(anyInt(),anyInt())).thenReturn(planPage);
或者这样
MockedStatic<PageMethod> pageMethodMock = mockStatic(PageMethod.class);
pageMethodMock.when(()->PageMethod.startPage(anyInt(),anyInt())).thenReturn(planPage);
我们点开startPage方法,会发现这个方法是父类PageMethod的方法,PageHelper是继承而 来,所以我们必须要去Mock父类。
用完之后记得pageMethodMock.close()否则会出现这个错误
For com.github.pagehelper.page.PageMethod, static mocking is already registered in the current thread ,To create a new mock, the existing static mock registration must be deregistered
这是因为测试用例中多次mock了PageMethod
Mockito3.8 如何mock静态方法 (如何mock PageHelper)相关推荐
- Spock测试框架如何Mock静态方法
1. 问题场景 在写单元测试时,难免会遇到需要Mock的静态方法.当使用Spock测试框架时,Spock提供Moc静态方法Mock只支持Groovy语言,无法支持Java语言实现的静态方法Mockin ...
- SpringBoot单元测试之mock静态方法
The article summary 1 为什么要对静态方法mock 2 如何使用`powermock`对静态方法`mock` 2.1 添加依赖 2.2 编写测试类 2.3 需要注意的问题 1 为什 ...
- SpringBoot单元测试Mock静态方法
这两天写单元测试碰到了一个问题,就是这个subnetmap里面的数据格式我不知道是怎么样的,所以直接mock掉返回自己指定的值吧. mockito库并不能 mock静态方法,需要依赖powermock ...
- junit5 mock静态方法 Mockito.mockStatic()
junit5 mock静态方法 环境 jdk11 , junit5 ,springboot pom <dependency><groupId>org.springframewo ...
- Java类静态方法的mock实现
Mockito 3.4.0 mock常见静态方法 待测试类: package com.taobao.vip.shop.biz.sqyk.manager;import com.taobao.vip.sh ...
- Mockito 如何 mock 静态方法
在实际工作当中,我们经常会遇到需要对静态方法进行 mock 的情况.在 mockito 2.x 的时代,我们需要借助 powmock 才能实现.当 mockito 进化到了 3.4.0 版本以后,也开 ...
- powermock静态类_如何使用Powermock对静态方法进行mock
在平常工作过程中,总会设计些工具类,里面通常使用静态方法来实现.那么如何来对这些静态方法进行mock,以及如何验证静态方法被调用?下面简单介绍下如何使用Powermock来实现针对静态方法的mock. ...
- 使用Mockito mock静态方法
在单测的时候,很多场景需要对静态方法进行mock打桩 之前在mockito2.x的时代需要借助powmock的功能 mockito在3.4.0版本也开始支持了静态方法的mock,使用方法如下 引入依赖 ...
- mock静态方法指引
mock静态方法指引 mockito 在3.4.0版本开始支持mock static method 文档:https://wttech.blog/blog/2020/mocking-static-me ...
最新文章
- 在centos上通过yum直接安装最新版gcc和开发工具
- c#中调用Excel
- vs.net2003无法打开.NET的Web应用服务
- neo4j browser执行脚本后不提示用时_还不懂什么是分层自动化测试的,有赞的实践经历告诉你...
- C++ newdelete
- Python输入输出练习
- python integral_Pycharm:应为“Integral”类型,而应为“str”
- IBM AIX创建lv
- 修改 timezone
- android生命周期_Android片段生命周期
- 一加7pro运动计步功能_时隔多年,一加再次入局中端智能手机 这次能否成功?...
- Android Behavior详解
- 项目经理是有责无权的“领导” 要会借力
- Spark Sql编程
- C4D R26 安装教程
- ue 清理缓存_浏览器缓存数据清理
- 聊聊前端框架——尤雨溪
- 周报格式(sohu)
- Hadoop性能测试工具
- 滴滴云千万补贴,助力中小企业数字化转型
热门文章
- 【阴阳师】真蛇10层记录
- 抖音推荐算法!(教你如何上热门)
- docker 搭建本地 coredns 服务器
- 云效告诉你如何进行研发排期,高效达成目标
- 学计算机的学生用什么笔记本电脑,什么样的笔记本电脑对学生有好处?这再合适不过了!...
- matlab决策树模型过程,利用MATLAB统计工具箱进行决策树分类的一个例子
- 腾讯云直播功能(云直播为例)
- word修订模式怎么彻底关闭_如何去掉word修订模式
- 外企工作日常:全英文CrossTalk反串讲-讲前紧张,讲后淡定
- 计算机二级vbf课百度云,计算机二级易错易混选择题.