在单测的时候,很多场景需要对静态方法进行mock打桩

之前在mockito2.x的时代需要借助powmock的功能

mockito在3.4.0版本也开始支持了静态方法的mock,使用方法如下

引入依赖包 mockito-inline


<dependency><groupId>org.mockito</groupId><artifactId>mockito-inline</artifactId><version>3.4.0</version><scope>test</scope>
</dependency>

注意 mockito的版本必须在3.4.0及以上

使用方式:

Mockito.mockStatic(Class<T> classToMock )

Example

@Test
void givenStaticMethodWithNoArgs_whenMocked_thenReturnsMockSuccessfully() {assertThat(StaticUtils.name()).isEqualTo("Baeldung");try (MockedStatic<StaticUtils> utilities = Mockito.mockStatic(StaticUtils.class)) {utilities.when(StaticUtils::name).thenReturn("Eugen");assertThat(StaticUtils.name()).isEqualTo("Eugen");}assertThat(StaticUtils.name()).isEqualTo("Baeldung");
}

Mockito.mockStatic 的返回类型是一个MockedStatic对象,它是一个作用域模拟对象

这个类的注释如下:

Represents an active mock of a type's static methods. The mocking only affects the thread on which this static mock was created and it is not safe to use this object from another thread. The static mock is released when this object's close() method is invoked. If this object is never closed, the static mock will remain active on the initiating thread. It is therefore recommended to create this object within a try-with-resources statement unless when managed explicitly, for example by using a JUnit rule or extension.

大致意思就是mock的静态方法仅影响创建此静态模拟的线程,并且从另一个线程使用此对象是不安全的。当调用close() 方法时,静态模拟将会释放。如果此对象从未关闭,则静态模拟将在启动线程上保持活动状态。因此,建议在try-with-resources的语句中创建此对象,或者使用JUnit规则或者extension扩展去管理。

在close()之后再调用静态方法,会直接走真实的逻辑,也就是mock失效。

所以具体怎么做按照自己的场景来。

参考:

How to mock static methods with Mockito | FrontBackend

使用Mockito mock静态方法相关推荐

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

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

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

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

  3. 使用Mockito mock一个静态方法

    使用Mockito mock一个静态方法 在3.4.0之前,我们是不能使用Mockito来mock一个静态方法的,而必须使用PowerMockito:但是在之后的版本中已经支持了通过Mockito直接 ...

  4. mockito mock void方法_一文让你快速上手 Mockito 单元测试框架(上)

    作者|mghio 编辑|包包 前言  在计算机编程中,单元测试是一种软件测试方法,通过该方法可以测试源代码的各个单元功能是否适合使用.为代码编写单元测试有很多好处,包括可以及早的发现代码错误,促进更改 ...

  5. mockito mock void方法_用过举手!SpringBoot 单元测试利器Mockito

    Mockito 是一种 Java mock 框架,他主要是用来做 mock 测试的,他可以模拟任何 Spring 管理的 bean.模拟方法的返回值.模拟抛出异常...等,在了解 Mockito 的具 ...

  6. mockito mock void方法_使用 Junit + Mockito 实践单元测试!

    一.前言 相信做过开发的同学,都多多少少写过下面的代码,很长一段时间我一直以为这就是单元测试... @SpringBootTest @RunWith(SpringRunner.class) publi ...

  7. mockito mock void方法_一文让你快速上手 Mockito 单元测试框架

    前言 在计算机编程中,单元测试是一种软件测试方法,通过该方法可以测试源代码的各个单元功能是否适合使用.为代码编写单元测试有很多好处,包括可以及早的发现代码错误,促进更改,简化集成,方便代码重构以及许多 ...

  8. mock()java,关于java:@ Mock,@ MockBean和Mockito.mock()之间的区别

    创建测试和模拟依赖项时,这三种方法有什么区别? @MockBean: @MockBean MyService myservice; @嘲笑: @Mock MyService myservice; Mo ...

  9. Mockito3.8 如何mock静态方法 (如何mock PageHelper)

    项目中遇到需要mock PageHelper,因为用到了startPage方法,而此方法是静态方法,如果需要mock静态方法,网上说法比较多的都是需要用Powermock,而这就需要引入新的依赖,这样 ...

最新文章

  1. Bad credentials异常
  2. 智源社区AI周刊·第二期:过去一周AI领域的新鲜事
  3. windows 包管理器scoop的使用
  4. matchers依赖_Hamcrest Matchers教程
  5. 网络爬虫--2.HTTP和HTTPS
  6. 虚拟机变更网卡MAC地址后的网络连接
  7. JAVA编码 —— 字符串关键字内容替换
  8. Nginx 上传图片500错误 open() /var/lib/nginx/tmp/
  9. mapreduce阶段出现pending的原因及解决
  10. 弹性系数和线径的计算公式_弹簧力的计算公式
  11. 黑苹果日记六(双系统引导)
  12. 公私钥加解密+数字签名原理图(原创)
  13. 潇洒郎:Ten-fold-cross validation- Naïve Bayes Classifier 十字交叉验证-贝叶斯分类器 Python实现
  14. 一款免安装、多平台兼容的 拾色器(Color Picker)
  15. 艾利特代理商—艾利特EC63机器人安装教程
  16. 6月份智能手机市场份额发布:联想超华为第二逼近三星
  17. excel数据透视表_无痛的方式隐藏Excel数据透视表项
  18. 测绘资质在线处理资质问题
  19. 【毕业设计】基于单片机的门禁系统 - 嵌入式 物联网
  20. 【整理】3dsMax烘焙纹理模糊

热门文章

  1. 可视化:Windows图形设备接口及绘图
  2. python and 我爱自然语言处理
  3. LD1117AG-3.3V-A-Q 友顺UTC
  4. unity中使用htc vive
  5. 基于人脸图像识别学生宿舍系统的设计与实现(论文+源码)_kaic
  6. 佛曰:前世五百年的回眸换来今世的擦肩而过。
  7. SpringBoot项目改名字(或者别的操作)导致Maven项目中的application.yml没有绿叶
  8. elementui 隐藏输入框_vue+element-ui实现显示隐藏密码
  9. 服务器安装anaconda3
  10. 摩托车无钥匙启动的好处