多语言展示
当前在线:1925今日阅读:75今日分享:44

单元测试PowerMockito使用说明

单元测试是软件开发必不可少的一个环节,而PowerMockito因为其功能相对其他测试工具更加全面,所以是目前相对使用率较高的一款测试工具。在网上也有相关的一些使用说明,但是也基本上不是很全面,甚至其中也有蛮多的坑,经过实际操作之后,特此留下这篇文章供后来人参考,如有不符之处请斧正!
工具/原料
1

Java

2

PowerMockito

方法/步骤
1

1、Mock私有属性下面是给caltFeeInfo对象的validator属性赋值“属性值”,示例如下:CaltFeeInfo caltFeeInfo = new CaltFeeInfo();PowerMockito.field(CaltFeeInfo.class, 'validator').set(caltFeeInfo, '属性值');

2

2、Mock私有方法示例:* 不带参数CaltFeeInfo caltFeeInfo1 = PowerMockito.spy(new CaltFeeInfo());PowerMockito.doReturn(“C1”).when(caltFeeInfo1, 'getHeader');* 带一个参数CaltFeeInfo caltFeeInfo1 = PowerMockito.spy(new CaltFeeInfo());PowerMockito.doReturn(“C1”).when(caltFeeInfo1, 'getCaltFeeInfo',Mockito.anyString());说明:先spy一个真实对象caltFeeInfo1,然后mock私有方法getCaltFeeInfo返回C1。注意事项:     1.使用下面这种方式mock私有方法,经过测试是不生效的,依然会执行方法内部程序。     PowerMockito.when(caltFeeInfo1, 'getContactId').thenReturn('C1');     2.带有参数的私有方法,如果实际执行这个私有方法传递的参数与mock时设置的参数不一致,那么mock私有方法依然不生效,会执行内部程序。

3

3、 Mock静态方法示例:      PowerMockito.mockStatic(HttpPostRequestUtil.class);      PowerMockito.when(HttpPostRequestUtil.getContactId(Mockito.anyString())).thenReturn('C1');说明:      将HttpPostRequestUtil类的getContactId方法进行mock,无论传递的是什么String参数都将返回“C1”

4

4、Mock构造方法示例:* 被测代码:public class CaltFeeInfo {public boolean callInternalInstance(String path) {File  file = new File(path);return file.exists();  }}测试代码:File file = PowerMockito.mock(File.class);    CaltFeeInfo caltFeeInfo1 = new CaltFeeInfo();    PowerMockito.whenNew(File.class).withArguments('bbb').thenReturn(file);    PowerMockito.when(file.exists()).thenReturn(true);    assertTrue(caltFeeInfo1 .callInternalInstance('bbb'));注意事项:当无参的构造方法与可变参构造方法同时存在时,不能使用withNoArguments()(报错的内容大概的意思就是不知道映射到哪个),应该使用withAnyArguments()原始方法示例:Public CaltFeeInfo (){}Public CaltFeeInfo (int ... args){}

5

5、 Mock普通方法 + Mock final方法示例:CaltFeeInfo  caltFeeInfo1  =  PowerMockito.mock(CaltFeeInfo .class);PowerMockito.when(caltFeeInfo1.isAlive()).thenReturn(true);

6

6、 Mock void方法示例:CaltFeeInfo  caltFeeInfo1  =  PowerMockito.mock(CaltFeeInfo .class);PowerMockito.doNothing().when(caltFeeInfo1.isAlive());

推荐信息