PowerMockito整理

PowerMockito总结:
一、演变:PowerMock 主要围绕着 Junit 测试框架和 TestNg 测试框架进行,其中在每个框架下面对所涉及的 Mock 框架仅仅支撑 EasyMock 和 Mockito。
二、优势:可以对 final 类型的class和method,类方法(static),局部变量 mock 等等。
三、注解:
@RunWith:指定PowerMockRunner运行测试用例,如不指定默认使用Junit提供的Runner。
@PrepareForTest:注解是告诉PowerMock为我提前准备一个需要mock的class。
@InjectMocks:被mock的主类。
@Mock:被mock类中需要调到的类,如工具类。
四、常见场景:
1、模拟私有变量:
①声明一个实例。
②使用field方法mock变量。
PowerMockito.field(类,文件名).set(实例,mock的结果);
set两参:
* @param obj the object whose field should be modified
* @param value the new value for the field of {@code obj}
2、模拟引用配置文件:
ReflectionTestUtils.setField(类,文件名,mock值);
3、模拟公共方法:
①引入类
注解方式(@InjectMocks:主类,@Mock:主类中所引用类),声明方式(new)
②mock方法
PowerMockito.when(method).thenreturn(result);
4、模拟私有方法:
①注解指定类
PrepareForTest注解中添加私有方法所属类;
②mock类为静态
PowerMockito.mockStatic(私有方法所属类);
③mock其方法
PowerMockito.when(方法).thenreturn(结果);
5、模拟Final:
①注解中指定被Final修饰的类
@PrepareForTest(Class.class):
②mock被Final修饰的类
Class aClass = PowerMockito.mock(Class.class);
③mock调用方法并赋予返回值
PowerMockito.when(aClass.method(传参))。thenReturn(返回值);
④验证方法是否被调用
Mockito.verify(aClass).method(传参);
五、其它场景:
1、模拟void无返回值方法:
Verify,用以验证方法是否调用。
2、模拟局部变量:
①mock被所需要mock类
Class c = PowerMockito.mock(Class.class);
②mock新生成一个局部变量
PowerMockito.whenNew(Class.class).withNoArguments().thenReturn(“result”);
③声明new一个形参
④验证局部变量的void方法是否被调用
Mockito.verify(employeeDao).method(形参);
3、无参有返回值:
①mock被所需要mock类
Class c = PowerMockito.mock(C1ass.c1ass);
②mock新生成一个局部变量
PowerMockito.whenNew(Class.class).withNoArguments().thenReturn©;
③mock其方法并mock返回值
PowerMockito.when(c.getMethod()).thenReturn(result);
④断言
assertEquals(mock值,实际值);
4、无参无返回值、有参无返回值:同void
5、有参有返回值:
①mock方法
PowerMockito.when(mock方法).thenreturn(结果):
②调用入口方法
返回数据类型 返回结果 =对象。入口方法名(实参)
③断言
assertEquals(mock值,实际值);
6、模拟静态类:
①模拟静态类
PowerMockito.mockStatic(Class.class) ;
②模拟静态类被调用方法并赋予返回值
③-1.无返回值
PowerMockito.verifyStatic();
③-2.有返回值:断言
7、 Verifying:测试工具,检验某个被测试方法是否被顺利调用。
六、方法使用
1、 whenNew
有参构造, whenNew(返回被mock的对象,并非实际产生new行为)
whenNew( EmployeeDao. class), withArguments(传参). thenReturn(返回值)
spy:mock一个对象,然后再调用其中的某个方法,会据原类所提供的方法来调用
3、 doNothing
此 doNothing方法mock无返回值方法
PowerMockito doNothing (). when(skv,“methodname”,“result”):
4、验证私有方法是否被调用
PowerMockito.verifyPriyate(实例).invoke(“methodname”,“result”);
七、反射覆盖:
①获取类
Class aClass Object getclass():
②获取方法, parameterTypes-传参数据类型
Method fs= aClass. getDeclaredMethod(methodName", Class<?>… parameterTypes):
③设置可允许
fs. setAccessible(true);
④反射mck方法,实参-具体值
fs, invoke( aclass, newInstance(),实参);

  • 4
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值