怎样使用PowerMockito 测试静态方法
更新时间:2021年7月12日 15:00 点击:2080
PowerMockito 测试静态方法
假如有下面一个类DemoStatic,它里面定义了各种静态方法,这些静态方法可能是一些Utilities方法,辅助其它的类。
package mock.demo; public class DemoStatic { public static String sayHello() { return "Hello"; } public static String saySomething(String word) { return word; } public static void sayAgain() { System.out.println(getMyWord()); } private static String getMyWord() { return "This is my word"; } }
首先
我们写一个测试类DemoStaticTest.java, 如下:
@RunWith(PowerMockRunner.class) @PrepareForTest({DemoStatic.class}) public class DemoStaticTest { }
注意在类的前面要加这个annotation:
@PrepareForTest({DemoStatic.class})
其次
需要在你的项目中加入下面的maven依赖:
<dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito</artifactId> <version>1.4.10</version> </dependency> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-module-junit4</artifactId> <version>1.4.10</version> </dependency>
Mock 无参数的静态方法
@Test public void testMockSayHello() { PowerMockito.spy(DemoStatic.class); PowerMockito.when(DemoStatic.sayHello()).thenReturn("my hello"); System.out.println(DemoStatic.sayHello()); // my hello }
Mock 带参数的静态方法
@Test public void testSaySomething() throws Exception { PowerMockito.spy(DemoStatic.class); PowerMockito.when(DemoStatic.class, "saySomething", Mockito.anyString()).thenReturn("something to say!"); System.out.println(DemoStatic.saySomething("say hello")); //something to say! }
Mock private 静态方法
@Test public void testMockPrivate() throws Exception { PowerMockito.spy(DemoStatic.class); PowerMockito.when(DemoStatic.class, "getMyWord").thenReturn("Nothing to say"); DemoStatic.sayAgain(); //Nothing to say }
PowerMock 静态方法模拟问题排查,结果是函数参数问题
问题:静态方法User.convert()的模拟,未匹配到预期值。
1. 检查静态方法的模拟过程
Mocking Static Method: // 1.类注解:@PrepareForTest(Static.class) //Static.class 是包含 static methods的类 方法内: // 2.模拟静态类(使用PowerMockito.spy(class)模拟特定方法) PowerMockito.mockStatic(Static.class); // 3.拦截:设置期望值 Mockito.when(Static.firstStaticMethod(param)).thenReturn(value);
检查过程没问题。 直接拦截静态方法试试
2. 直接拦截静态方法
验证通过,模拟静态方法没问题。
3. 初步定义为参数问题:函数式参数
// 拦截的方法 <E, R> List<R> queryForList(Object var1, Class<E> var2, Function<E, R> var3);
Function类型的参数精确配置不应该 User::convert 这样传。那该怎么传呢?我在官网和百度扒资料,然而不知道是没有,还是没找对。反正,没找到该怎么解决。
没办法,只好先模糊匹配下了
4. 只匹配类型,算解决问题吗
花了时间不一定有收获,不花时间也许也有收获呢。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持猪先飞。
相关文章
- 这篇文章主要介绍了C#中静态方法和实例化方法的区别、使用,文中讲解的非常细致,对大家的学习有所帮助,感兴趣的朋友可以了解下...2020-06-25
- 这篇文章主要介绍了c#静态方法和非静态方法,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了详解SpringBoot静态方法获取bean的三种方式,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-22
- 写了一个翻译英汉单词辞典的小程序,发现在调用几千次的时候速度很慢...2020-06-25
- 很多朋友可能分不清楚在php中静态变量与静态方法的用法与区别在哪里,下面我来根据自己的经验来介绍静态变量与静态方法一些理解。 在PHP中,静态变量的解释是存在于...2016-11-25
- 本文主要介绍了C#中的静态成员、静态方法、静态类的基础的使用,并做了相关的代码演示,供初学者参考。...2020-06-25
- 为菜鸟所准备……其实就是弹出JavaScript小窗口,总得来说就是定义的一个DIV,感兴趣的朋友可以了解下,或许对你学习asp.net有所帮助...2021-09-22
- 今天带大家学习的是Java8新特性的相关知识,文章围绕着Java接口中的默认方法和静态方法展开,文中有非常详细的的代码示例,需要的朋友可以参考下...2021-06-10
- 这篇文章主要介绍了C#中实现抽象类里建立静态方法,需要的朋友可以参考下...2020-06-25
- 动态方法,在使用时需要先创建实例,才能调用实例方法,而静态方法则不需要,直接使用即可。...2021-09-22
- 这篇文章主要介绍了解析python 类方法、对象方法、静态方法的的相关资料,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下...2020-08-15
- 这篇文章主要介绍了使用PowerMockito 测试静态的方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-12
- 这篇文章主要介绍了python类方法和静态方法,实例分析了Python中返回一个返回值与多个返回值的方法,需要的朋友可以参考下...2021-10-24
- php static静态属性和静态方法我们以前有介绍过它们的区别在哪里,下面我们来看看关于static静态属性和静态的用法例子。 这里分析了php面向对象中static静态属性和...2016-11-25
Java单元测试Powermockito和Mockito使用总结
公司单元测试框架选用了Junit 4.12,Mock框架选用了Mockito和PowerMock,本文主要介绍了Java单元测试Powermockito和Mockito使用总结,感兴趣的可以了解一下...2021-09-08DataList中TextBox onfocus调用后台void静态方法及获取相应行数
DataList中我放了一个TextBox 现在的问题是当我光标放到TextBox上的时候。如果让onfocus调用后台某一个void静态方法并且在静态方法里边获取光标相应的DataList的相应行数,本文介绍如何实现,感兴趣的朋友可以了解下...2021-09-22- 这篇文章主要介绍了Spring-AOP 静态普通方法名匹配切面操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-18
- php 时间转换静态方法 /** * 时间转换静态方法 * @param string $formatTo 返回格式 * @param mixed $source 时间源 * @return string */ public s...2016-11-25
asp.net实现利用反射,泛型,静态方法快速获取表单值到Model的方法
这篇文章主要介绍了asp.net实现利用反射,泛型,静态方法快速获取表单值到Model的方法,结合实例形式分析了asp.net中反射,泛型,静态方法给model赋值的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2021-09-22- 今天文章要给大家介绍的是php中类和对象:静态属性、静态方法调用。很不错的小技巧,简单实用,不知道的赶紧来看看。 在PHP中,使用关键字 static 修饰成员属性和成员方...2017-07-06