使用Mockito mock一个静态方法
使用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一个静态方法相关推荐
- 使用Mockito mock静态方法
在单测的时候,很多场景需要对静态方法进行mock打桩 之前在mockito2.x的时代需要借助powmock的功能 mockito在3.4.0版本也开始支持了静态方法的mock,使用方法如下 引入依赖 ...
- mockito mock void方法_一文让你快速上手 Mockito 单元测试框架(上)
作者|mghio 编辑|包包 前言 在计算机编程中,单元测试是一种软件测试方法,通过该方法可以测试源代码的各个单元功能是否适合使用.为代码编写单元测试有很多好处,包括可以及早的发现代码错误,促进更改 ...
- mockito mock void方法_用过举手!SpringBoot 单元测试利器Mockito
Mockito 是一种 Java mock 框架,他主要是用来做 mock 测试的,他可以模拟任何 Spring 管理的 bean.模拟方法的返回值.模拟抛出异常...等,在了解 Mockito 的具 ...
- mockito mock void方法_使用 Junit + Mockito 实践单元测试!
一.前言 相信做过开发的同学,都多多少少写过下面的代码,很长一段时间我一直以为这就是单元测试... @SpringBootTest @RunWith(SpringRunner.class) publi ...
- mockito mock void方法_一文让你快速上手 Mockito 单元测试框架
前言 在计算机编程中,单元测试是一种软件测试方法,通过该方法可以测试源代码的各个单元功能是否适合使用.为代码编写单元测试有很多好处,包括可以及早的发现代码错误,促进更改,简化集成,方便代码重构以及许多 ...
- mock()java,关于java:@ Mock,@ MockBean和Mockito.mock()之间的区别
创建测试和模拟依赖项时,这三种方法有什么区别? @MockBean: @MockBean MyService myservice; @嘲笑: @Mock MyService myservice; Mo ...
- Mockito:一个强大的用于Java开发的模拟测试框架
介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用Mockito的Java示例. 模拟(Mock)的概念 在软件开发的世界之外, "mock"一 ...
- java字符串的运用代码_java – 如何使用mockito模拟一个字符串?
我需要模拟一个测试场景,其中我调用String对象的getBytes()方法,我得到一个UnsupportedEncodingException. 我试图实现那使用下面的代码: String nonE ...
- java mock什么意思_java @Mock, @MockBean 与 Mockito.mock( ) 之间的差异
纯Mockito库import org.mockito.Mock; ... @Mock MyService myservice; 和import org.mockito.Mockito; ... My ...
最新文章
- 当有人看不起你时,要懂得反省自己
- JDBC连接mysql数据的7个步骤(讲解+源码)
- 美团北京,今日起无人驾驶送外卖
- DataGridView控件内建立日期选择编辑列
- Net中常见问题及解决方法整理
- 【laravel5.4】重定向带参数
- dhtmlXTree 指南与实例(二)
- AngularJS 国际化 支持记录语言刷新后语言不变
- php if多条件_PHP的数据类型
- Moment.js 一款JS时间封装库
- 新一代口腔清洁神器 素诺智能可视超声波洁牙仪T11Pro评测
- SparkMLlib之二Basic Stastics
- Allegro 导装配图
- 每日一面 - 为何hashmap默认的负载因子是0.75?应该是空间和时间的折中,背后的统计原理是什么呢?
- i5 6600 HD530联想扬天S5250黑苹果
- 杜比dss200服务器重装,杜比数字影院处理器 DSS200 (Dolby Screen Server DSS200)
- 一个架构师的真正职责
- 你终归是逃不过,DNA双螺旋编织好的宿命
- Python 向人工智能方向发展的技能树
- ai面谈技巧_AI时代的人际化技巧