转:http://blog.sina.com.cn/s/blog_791e34210102y1bg.html
当IT中有些依赖组件无法正常集成,需要mock支持测试,可以使用power mockito。
特别注意:
比如有个 Service处于IT case的底层,普通的mock根本mock不进去,但我们又不能为了集成测试,为这个test case单独开一个口子,注入mock对象。power mockito强大的mock能力在这里可以用上。
比如: 我的mock对象 impalaService它在schmaMessagehandler类里new出来的,则需要加上注解。
首先在test 类的开头,加上注解头部,头部类是mock对象所在类。
@RunWith(PowerMockRunner.class) @PrepareForTest({HttpClient.class,SchemaMessageHandler.class})
其次:
PooledImpalaService impalaService = PowerMockito.mock(PooledImpalaService.class);
PowerMockito.whenNew(PooledImpalaService.class).withArguments((ConfigurationanyObject()).thenReturn(impalaService);
doNothing().when(impalaService).createTable(anyString(),(Schema) anyObject());
使用powermockito,注意在用any()参数时候,比如
doNothing().when(impalaService).createTable(anyString(),(Schema) anyObject());
参数列表中,只要一个使用了any(),any****,则所有参数都要用any相关的参数,否则mock不成功。
总的来说,在it当中,只有你想mock一个对象,一定可以,比如你在A类中用到了B类,那么在prepareForTest中增加A类的注解。
如下:
@PrepareForTest({A.class})
然后,在it中 声明一个B类,B b = PowerMockito.mock(B.class);
这时候,就可以指定b的方法的返回值,或 PowerMockit.doNothing().when(b).方法名(),让该方法什么也不做。最后,再讲A实例化。PowerMockit是讲究mock设置顺序的。一定要注意。