powermockito的使⽤技巧
当IT中有些依赖组件⽆法正常集成,需要mock⽀持测试,可以使⽤power mockito。
特别注意:
当对⼀个对象进⾏powermockito,应该在prepare⽅法,统⼀mock这个对象。然后在其他⽅法,分别进⾏调⽤when,否则,多个⽅法内进⾏mock,会出错。
⽐如有个 Service处于IT ca的底层,普通的mock根本mock不进去,但我们⼜不能为了集成测试,为这个testca单独开⼀个⼝⼦,注⼊mock对象。power mockito强⼤的mock能⼒在这⾥可以⽤上。
⽐如: 我的mock对象impalaService它在schmaMessagehandler类⾥new出来的,则需要加上注解。
⾸先在test 类的开头,加上注解头部,头部类是mock对象所在类。
(PowerMockRunner.class)
({HttpClient.class,SchemaMessageHandler.class})其次:PooledImpalaService impalaService =
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类的注解。如下:({A.class})然后,在it中 声明⼀个B类,B b = k(B.class);这时候,就可以指定b的⽅法的返回值,或
PowerMockit.doNothing().when(b).⽅法名(),让该⽅法什么也不做。最后,再讲A实例化。PowerMockit是讲究mock设置顺序的。⼀定要注意。