powermock静态类_使用PowerMockito 对静态类进行mock

Mock的中文的意思就是模拟,Mockito是mock的扩展,但是Mockito并不支持对静态类的mock,所以我们引入PowerMockito实现对静态类的mock.

首先pom添加PowerMockito 的 jar包引用,注意相应的版本号。否则会出现jar包冲突异常。

org.mockito

mockito-all

1.10.8

test

org.powermock

powermock-api-mockito

1.6.1

test

org.powermock

powermock-module-junit4

1.6.1

test

dependency>

junit

junit

4.12

test

如例我们需要对LogUtil.class 的 静态方法进行mock,类格式如下,该类的两个方法均为静态方法。

public class LogUtil {

public static BaseAuditLog getLogBean(String operContent){

return null;

}

public static void saveLog(String context){

}

使用PowerMockito 测试类如下 :

@RunWith(PowerMockRunner.class) //1.

@PrepareForTest({LogUtil.class}) //2.

public class AddressBookServiceTest_mock {

@Before

public void setUp() {

MockitoAnnotations.initMocks(this);

}

@Test

public void test_staticMethod_PowerMock() {

//绕过静态类

PowerMockito.mockStatic(LogUtil.class);//3.绕过静态类

when(LogUtil.getLogBean(json)).thenReturn(new SensitiveInfoOperationLog());//4.预设静态类返回值

String response = addressBookServiceImpl.queryAddressBookFuzzy(json);

}

}

以上便可以实现的静态类的mock.

因为要实现单元测试,还需要实现对类成员变量进行mock.

有两种主要方法

1.通过继承方式实现

2.通过反射的方式实现

反射具体示例如下:

public classAddress{

boolean querySwitch= false}public classAddress_test{privateAddress address;public voidtest_Address(){//通过反射改变类成员变量值

boolean querySwitch=false;

Field field=address.getClass().getDeclaredField("querySwitch");

field.setAccessible(true);

field.set(address,querySwitch);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值