一.什么是MOCK?
模拟真实对象行为的一个假的对象,该对象中的数据可以按照自己的期望赋予。
二.为什么要MOCK?
1.在单体测试过程中,有的对象很难构造或者获取;
2.调用的别人的逻辑还没有实现。
三.PowerMockito,EasyMock,Mockito的区别:
EasyMock:EasyMock 使用动态代理,能够创建任何接口的基本实现,可以验证方法的调用种类、次数、顺序,可以令 Mock 对象返回指定的值或抛出指定异常。
使用步骤:
第一步:使用 EasyMock 生成 Mock 对象;
第二步:录制 Mock 对象的预期行为和输出;
第三步:将 Mock 对象切换到 播放 状态;
第四步:调用 Mock 对象方法进行单元测试;
第五步:对 Mock 对象的行为进行验证。
Mockito:可校验哪些函数被调用,消除了对期望行为的需要
使用步骤:
第一步:使用 mockito 生成 Mock 对象;
第二步:定义(并非录制) Mock 对象的行为和输出(expectations部分);
第三步:调用 Mock 对象方法进行单元测试;
第四步:对 Mock 对象的行为进行验证。
PowerMock:是在EasyMock 以及 Mockito上的扩展,可以实现对静态函数、构造函数、私有函数、Final 函数以及系统函数的模拟
四.PowerMock的常用注解:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ YourClass.class})//模拟静态,final,私有方法等时需加上
备注:以上两个备注一般同时使用
@InjectMocks:mock将要注入的实例
@Mock:创建一个mock,该mock对象所有方法被置空
@Spy:创建一个mock,该mock对象所有方法都是真实的
五.PowerMockito的使用:
- MOCK通过参数传递的对象
需要测试的目标代码 Public class ConvertController{ @Resource private ConvertServiceImpl convertservice; Public APIResult convert(HttpServletRequest request){ Return convertservice.getConvertResult(request.getInputStream(), request.getContentType()); } } 测试方法 使用注解时需加上: public void setUp() throws Exception {
|