java中PowerMockito的使用
PowerMockito使用方法
//导入PowerMockito类
import org.powermock.api.mockito.PowerMockito;
//在单元测试的类中添加注解
@RunWith(PowerMockRunner.class)
//AirPrice.class这个是带测试的类
@PrepareForTest({AirPrice.class})
public class AirPriceTest {
}
使用场景举例
mock目标类的属性值
//自己定义的mock数据
Hashtable parameters = mockParameters();
//将自己的mock数据赋值到AirPrice类中,这样在AirPrice类中使用parameters这个属性的所有方法都能够使用我们的mock数据
PowerMockito.field(AirPrice.class, "parameters").set(AirPrice, parameters);
目标测试方法中new对象的如何mock
场景描述: 当目标测试方法中如果new 了一个对象,我们又不关注这个对象的处理过程时,可以mock他返回一个我们定义的mock对象。
//创建一个Service的mock对象
Service service = PowerMockito.mock(Service.class);
//当待测试的方法中new Service()对象时,使用我们定义的mock对象service PowerMockito.whenNew(Service.class).withAnyArguments().thenReturn(service);
目标测试方法中new的对象调用方法的结果如何mock
//创建一个Service的mock对象
Service service = PowerMockito.mock(Service.class);
//当待测试的方法中new Service()对象时,使用我们定义的mock对象service
PowerMockito.whenNew(Service.class).withAnyArguments().thenReturn(service);
//mock service.sendRQ()返回的内容,其中rsAdt,rsChd是我们定义的mock数据,这样使用当执行一次sendRQ方法时会返回rsAdt,当执行第二次sendRQ方法时会返回rsChd
PowerMockito.when(service.sendRQ(Mockito.argThat(new ArgumentMatcher<ReshopRQ>() {
@Override
public boolean matches(Object rq) {
return true;
}
}))).thenReturn(rsAdt).thenReturn(rsChd);
上述是结合Mockito来实现的,sendRQ中需要传递的是类对象,所以需要自己去实现返回结果,如果是其它的基础类型,可以使用Mockito.anyByte()等形式。
其余介绍
PowerMockito比较强大,可以mock目标测试的private方法和静态属性,因为目前没有用到,所以暂不介绍