单元测试PowerMockito使用说明

2025-10-17 02:53:52

1、Mock私有属性

下面是给caltFeeInfo对象的validator属性赋值“属性值”,示例如下:

CaltFeeInfo caltFeeInfo = new CaltFeeInfo();

PowerMockito.field(CaltFeeInfo.class, "validator").set(caltFeeInfo, "属性值");

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、 Mock静态方法

示例:

      PowerMockito.mockStatic(HttpPostRequestUtil.class);

      PowerMockito.when(HttpPostRequestUtil.getContactId(Mockito.anyString())).thenReturn("C1");

说明:

      将HttpPostRequestUtil类的getContactId方法进行mock,无论传递的是什么String参数都将返回“C1”

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、 Mock普通方法 + Mock final方法

示例:

CaltFeeInfo  caltFeeInfo1  =  PowerMockito.mock(CaltFeeInfo .class);

PowerMockito.when(caltFeeInfo1.isAlive()).thenReturn(true);

6、 Mock void方法

示例:

CaltFeeInfo  caltFeeInfo1  =  PowerMockito.mock(CaltFeeInfo .class);

PowerMockito.doNothing().when(caltFeeInfo1.isAlive());

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢