最近1个月项目尾声,在公司做单体测试,从模仿开始,积累了一些东西,记录下来,留备以后不时之需;
需要jar包:
javassist-3.16.1-GA.jar
mockito-all-1.9.5.jar
powermock-api-mockito-1.5.6.jar
powermock-api-support-1.5.6.jar
powermock-core-1.5.6.jar
powermock-module-junit4-1.5.6.jar
powermock-module-junit4-common-1.5.6.jar
powermock-reflect-1.5.6.jar
junit-4.10.jar
在使用mock时,首先要在测试类上加上注解@PrepareForTest({类名.class}),这里的“类名.class”是类里调用的类,需要被mock的类
当需要mock私有方法调用的私有方法时,需要加上@RunWith(PowerMockRunner.class),其余不需要加,创建时也可以用new。
public调用有返回值的private方法
PowerMockito.when(对象,“私有方法名”,参数).thenReturn(期望的value);此方法要加上@RunWith(PowerMockRunner.class),此时创建类的对象时不能直接用new,需要用PowerMockito.Mock(类名.class);并需要将 类名.class放到类上的注解@PrepareForTest({类名.class})内;
用mock对象替换原代码中的对象
e.g:
public class AA{
Private User u;
public void A(){
u.getName();
}
}
@PrepareForTest({User.class})
Public class test{
@Test
public void test_001(){
AA a = new AA();
User u1 = PowerMockito.Mock(User.class);
Whitebox.setInternalState(a,"u",u1);
PowerMockito.when(u1.getName()).thenReturn(value);
}
}
4.要对一个类内,方法调用的方法进行mock
e.g:public class AA{
private User u;
private Ver v;
public void getData(){
String a = u.getName();
String b = v.getAge();
}
}
测试的过程:①.首先对整个类进行mock
②.然后调用方法
③.接着mock调用的类
④.新对象的名字代替代码里的
⑤.对方法进行mock
⑥.调方法。
e.g:①.AA a = PowerMockito.mock(AA.class);
②.PowerMockito.doCallRealMethod.when(a).getData();
③.User u1 = PowerMockito.mock(User.class);
④.Whitebox.setInternalState(a,"u",u1);
⑤.PowerMockito.when(u1.getName()).thenReturn(value);
⑥.a.getData();
5.测试中测异常
PowerMockito.doThrow(new Exception()).when(对象).getName();
new Exception()是你期待的异常,getName是出异常的方法;
6.。。。。天太热了,凉了在写。。。。
本文出自 “骑猴上树” 博客,请务必保留此出处http://qihoushangshu.blog.51cto.com/7872138/1662073
原文地址:http://qihoushangshu.blog.51cto.com/7872138/1662073