概述
使用PowerMockito.mockStatic(class)创建静态类的mock对象
注意事项: 如果想对某个类的静态方法进行mock,则必须在PrepareForTest后面加上相应的类名,比如Utility.class.
-
当使用mockStatic方法对Utility.class进行了mock,那么此时该类中的所有方法实际上都已经被mock了,
如果没有对某个方法进行具体mock返回值,则调用该方法时,会直接返回对应返回类型的默认值,并不会执行真正的方法.(如果方法返回值类型是boolean,则默认返回false). -
想对已经mock的类的某个方法调用真实的方法,而不是调用mock方法,该如何处理?
方法1.使用PowerMockito.spy(Utility.class)
可以再次使用PowerMockito.spy(Utility.class),之后的方法调用,会执行真正的方法体内容.
使用spy后,虽然已经对该类做了mockStatic处理,但此时该类中的所有方法仍然都会调用真实的方法,而不是默认的mock方法.
这种用法主要适用于只想要对某个类的少量方法进行mock,其他方法仍然执行真正的方法,平常写时,可以紧跟在mockStatic方法之后.
方法2: 使用thenCallRealMethod()方法
doCallRealMethod().when(MockObject).methodName();
或者PowerMockito.when(Utility.listIsNotNullOrEmpty(Mockito.anyList())).thenCallRealMethod();
此行的含义就是调用到mock类的该方法执行真正的方法,而不是mock方法.
参考网址:https://www.jianshu.com/p/0c2480b1709e
模拟返回值为void的静态方法:
对于void类型的静态方法,我们不对该方法做任何的mock,同样不会走真正的方法体.
这是因为mock整个类时,该类的所有方法就已经都被mock了,并且按照默认的方式进行处理,此时对于返回值为void的方法就是什么都不做。
显示对void方法进行mock,使用doNothing()mock静态方法
1.PowerMockito.doNoting().when(Utility.class,"doSomething",Mockito.any());
此处采取的when原型如下:
<T> void when(Class<T> classMock,String methodToExpect,Object... parameters) throws Exception;
函数注释如下,
Allows to mock a static private method based on method name and parameters when stubbing in doThrow()|doAnswer()|doNothing()|doReturn() style
Example:
doThrow(new RuntimeException()).when(MyClass.class, "methodName", parameter1, parameter2);
可见该种方式主要适用于对私有静态且无返回值的方法进行mock。
2. PowerMockito.doNothing().when(Utility.class);
Utility.doSomething(Mockito.any());
此处采取的when原型如下:
void when(Class<?> classMock);
函数注释如下,
Allows to choose a static method when stubbing in doThrow()|doAnswer()|doNothing()|doReturn() style
Example:
doThrow(new RuntimeException()).when(StaticList.class);
StaticList.clear();
可见该种方式主要适用于对公有静态且无返回值的方法进行mock。
综上,对于无返回值的静态方法,可以有两种方式实现mock:
(1)隐式写法,即只需要mock静态类即可;
(2)显示写法,此时需要根据方法是私有的还是公有的选择相应的格式.
参考网址:https://www.jianshu.com/p/44163d1089dd
TestCase期望异常的设置: 在@Test后面使用(expected = Exception.class)
example: @Test(expected = Exception.class)
对static方法进行执行次数的验证:(listIsNullOrEmpty是Utility中的静态方法)
PowerMockito.verifyStatic(Mockito.times(1));
Utility.listIsNullOrEmpty(Mockito.anyList());
先使用verifyStatic方法表名要验证静态方法,可以带参数,也可以不带参数,其参数可以使用Mockito的times
方法或never方法来表示其调用次数.下面紧跟着的一行则表示要验证的是已经mock的静态方法.
对mock对象的方法进行期望返回值的使用方式:
PowerMockito.when(mockObject.mockMethod(params)).thenReturn(returnValue);
PowerMockito.when(mockObject,"mockMethodName",params..).thenReturn(returnValue);
最后
以上就是复杂火为你收集整理的使用PowerMockito对静态方法进行mock的全部内容,希望文章能够帮你解决使用PowerMockito对静态方法进行mock所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复