使用Mockito mock一个静态方法

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

下面我们就一步一步来看怎么去使用。

1.一个建单的静态工具类

public class StaticUtils {private StaticUtils() {}public static List<Integer> range(int start, int end) {return IntStream.range(start, end).boxed().collect(Collectors.toList());}public static String name() {return "Baeldung";}
}

为了演示,我们提供了一个无参数的返回值为String的方法和一个带参数并返回List的方法。

2.Maven依赖

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

在本例中,我们使用了mockito-inline版本号为3.8.0的包,当前最新的版本为4.5.1

3.Mock无参数静态方法
下面我们来看看如何Mock无参数的方法-name。

@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");
}

首先我们需要把我们的mockStatic写到try-with-resources代码块中,以确保我们在使用完mock的静态方法后能够及时释放;同时我们会在测试用例的前后分别校验name方法的返回值,确保前后都没有被mock,返回的真实值,符合我们的预期;但是该方法并不一定好实现,如果返回的结果可能会变化不定的话。

4.Mock带参数的静态方法

@Test
void givenStaticMethodWithArgs_whenMocked_thenReturnsMockSuccessfully() {assertThat(StaticUtils.range(2, 6)).containsExactly(2, 3, 4, 5);try (MockedStatic<StaticUtils> utilities = Mockito.mockStatic(StaticUtils.class)) {utilities.when(() -> StaticUtils.range(2, 6)).thenReturn(Arrays.asList(10, 11, 12));assertThat(StaticUtils.range(2, 6)).containsExactly(10, 11, 12);}assertThat(StaticUtils.range(2, 6)).containsExactly(2, 3, 4, 5);
}

格式为:

MockedStatic<T> utilities = Mockito.mockStatic(T.class)utilities.when(() -> T.function(arg1, arg2)) .thenReturn(result);

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

  1. 使用Mockito mock静态方法

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

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

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

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

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

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

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

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

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

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

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

  7. Mockito:一个强大的用于Java开发的模拟测试框架

    介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用Mockito的Java示例. 模拟(Mock)的概念 在软件开发的世界之外, "mock"一 ...

  8. java字符串的运用代码_java – 如何使用mockito模拟一个字符串?

    我需要模拟一个测试场景,其中我调用String对象的getBytes()方法,我得到一个UnsupportedEncodingException. 我试图实现那使用下面的代码: String nonE ...

  9. java mock什么意思_java @Mock, @MockBean 与 Mockito.mock( ) 之间的差异

    纯Mockito库import org.mockito.Mock; ... @Mock MyService myservice; 和import org.mockito.Mockito; ... My ...

最新文章

  1. 当有人看不起你时,要懂得反省自己
  2. JDBC连接mysql数据的7个步骤(讲解+源码)
  3. 美团北京,今日起无人驾驶送外卖
  4. DataGridView控件内建立日期选择编辑列
  5. Net中常见问题及解决方法整理
  6. 【laravel5.4】重定向带参数
  7. dhtmlXTree 指南与实例(二)
  8. AngularJS 国际化 支持记录语言刷新后语言不变
  9. php if多条件_PHP的数据类型
  10. Moment.js 一款JS时间封装库
  11. 新一代口腔清洁神器 素诺智能可视超声波洁牙仪T11Pro评测
  12. SparkMLlib之二Basic Stastics
  13. Allegro 导装配图
  14. 每日一面 - 为何hashmap默认的负载因子是0.75?应该是空间和时间的折中,背后的统计原理是什么呢?
  15. i5 6600 HD530联想扬天S5250黑苹果
  16. 杜比dss200服务器重装,杜比数字影院处理器 DSS200 (Dolby Screen Server DSS200)
  17. 一个架构师的真正职责
  18. 你终归是逃不过,DNA双螺旋编织好的宿命
  19. Python 向人工智能方向发展的技能树
  20. ai面谈技巧_AI时代的人际化技巧

热门文章

  1. 【soft6星评论】华兴源创成为科创板第一股
  2. Skywalking(8): 获取追踪ID
  3. 设计模式深入学习---Component组合模式(结构型模式)
  4. 【总结整理】产品经理面试常见问题
  5. K-means聚类算法实现分类
  6. OSPF前三类LSA及虚链路
  7. ICDE 2021 | 可微图神经网络架构搜索
  8. js数组添加元素的几种方式
  9. C++ 构造函数 析构函数
  10. python画图零基础入门教程_Python画图学习入门教程