项目中遇到需要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)相关推荐

  1. Spock测试框架如何Mock静态方法

    1. 问题场景 在写单元测试时,难免会遇到需要Mock的静态方法.当使用Spock测试框架时,Spock提供Moc静态方法Mock只支持Groovy语言,无法支持Java语言实现的静态方法Mockin ...

  2. SpringBoot单元测试之mock静态方法

    The article summary 1 为什么要对静态方法mock 2 如何使用`powermock`对静态方法`mock` 2.1 添加依赖 2.2 编写测试类 2.3 需要注意的问题 1 为什 ...

  3. SpringBoot单元测试Mock静态方法

    这两天写单元测试碰到了一个问题,就是这个subnetmap里面的数据格式我不知道是怎么样的,所以直接mock掉返回自己指定的值吧. mockito库并不能 mock静态方法,需要依赖powermock ...

  4. junit5 mock静态方法 Mockito.mockStatic()

    junit5 mock静态方法 环境 jdk11 , junit5 ,springboot pom <dependency><groupId>org.springframewo ...

  5. Java类静态方法的mock实现

    Mockito 3.4.0 mock常见静态方法 待测试类: package com.taobao.vip.shop.biz.sqyk.manager;import com.taobao.vip.sh ...

  6. Mockito 如何 mock 静态方法

    在实际工作当中,我们经常会遇到需要对静态方法进行 mock 的情况.在 mockito 2.x 的时代,我们需要借助 powmock 才能实现.当 mockito 进化到了 3.4.0 版本以后,也开 ...

  7. powermock静态类_如何使用Powermock对静态方法进行mock

    在平常工作过程中,总会设计些工具类,里面通常使用静态方法来实现.那么如何来对这些静态方法进行mock,以及如何验证静态方法被调用?下面简单介绍下如何使用Powermock来实现针对静态方法的mock. ...

  8. 使用Mockito mock静态方法

    在单测的时候,很多场景需要对静态方法进行mock打桩 之前在mockito2.x的时代需要借助powmock的功能 mockito在3.4.0版本也开始支持了静态方法的mock,使用方法如下 引入依赖 ...

  9. mock静态方法指引

    mock静态方法指引 mockito 在3.4.0版本开始支持mock static method 文档:https://wttech.blog/blog/2020/mocking-static-me ...

最新文章

  1. 在centos上通过yum直接安装最新版gcc和开发工具
  2. c#中调用Excel
  3. vs.net2003无法打开.NET的Web应用服务
  4. neo4j browser执行脚本后不提示用时_还不懂什么是分层自动化测试的,有赞的实践经历告诉你...
  5. C++ newdelete
  6. Python输入输出练习
  7. python integral_Pycharm:应为“Integral”类型,而应为“str”
  8. IBM AIX创建lv
  9. 修改 timezone
  10. android生命周期_Android片段生命周期
  11. 一加7pro运动计步功能_时隔多年,一加再次入局中端智能手机 这次能否成功?...
  12. Android Behavior详解
  13. 项目经理是有责无权的“领导” 要会借力
  14. Spark Sql编程
  15. C4D R26 安装教程
  16. ue 清理缓存_浏览器缓存数据清理
  17. 聊聊前端框架——尤雨溪
  18. 周报格式(sohu)
  19. Hadoop性能测试工具
  20. 滴滴云千万补贴,助力中小企业数字化转型

热门文章

  1. 【阴阳师】真蛇10层记录
  2. 抖音推荐算法!(教你如何上热门)
  3. docker 搭建本地 coredns 服务器
  4. 云效告诉你如何进行研发排期,高效达成目标
  5. 学计算机的学生用什么笔记本电脑,什么样的笔记本电脑对学生有好处?这再合适不过了!...
  6. matlab决策树模型过程,利用MATLAB统计工具箱进行决策树分类的一个例子
  7. 腾讯云直播功能(云直播为例)
  8. word修订模式怎么彻底关闭_如何去掉word修订模式
  9. 外企工作日常:全英文CrossTalk反串讲-讲前紧张,讲后淡定
  10. 计算机二级vbf课百度云,计算机二级易错易混选择题.