mock时忽略不必要的初始化

PowerMockito.mockStatic时忽略加载类的静态field,比如想PowerMockito.mockStatic(ClassA.class),ClassA如下

public class ClassA {

private static final boolean CONF_FLAG = Configuration.getConfig()
.get(Status.Initialization).getConfFlag(); // throws an NPE

public static methodTobeCalledByOtherTestMethod(TestObject a){
...
 }
}

filed CONF_FLAG需要调用一些其他依赖,而这些依赖不可获得,当mock时会抛异常,可以使用:

@RunWith(PowerMockRunner.class)
@PrepareForTest({ClassA.class})
@SuppressStaticInitializationFor("com.xxx.xxx.ClassA")
public class XXXTest {

    @Test
    public void testXXX() {
        PowerMockito.mockStatic(ClassA.class);
        ....
    }
}

使用SuppressStaticInitializationFor就不会去初始化CONF_FLAG。

 

另外其他忽略的配置请见:Suppress Unwanted Behavior

参考:What am I doing wrong mocking this private static final variable using mockito and reflection?

修改某个静态函数的返回值:PowerMock, mock a static method, THEN call real methods on all other statics

 

转载于:https://www.cnblogs.com/drizzlewithwind/p/7383676.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PowerMockito 是一个 Java 单元测试框架,它扩展了 Mockito 和 EasyMock 框架,使得我们可以更方便地在单元测试中进行一些难以测试的代码,如静态方法、私有方法、final 类等等。在 PowerMockito 中 mock 初始化方法可以使用 whenNew() 方法来实现,具体步骤如下: 1. 使用 PowerMockito.mockStatic() 方法来 mock 静态类的方法 2. 使用 PowerMockito.whenNew() 方法来 mock 初始化类的方法,其中需要传入需要 mock 的类和 mock 后的实例对象 3. 在 whenNew() 方法中使用 PowerMockito.doNothing() 方法来 mock 初始化方法,使其什么也不做 下面是一个简单的示例代码: ``` // 静态类 public class StaticClass { public static void staticMethod() { System.out.println("Static method is called."); } } // 初始化类 public class InitClass { public void initMethod() { StaticClass.staticMethod(); System.out.println("Init method is called."); } } // 测试类 @RunWith(PowerMockRunner.class) @PrepareForTest({StaticClass.class, InitClass.class}) public class TestClass { @Test public void testInitMethod() throws Exception { // mock 静态类的方法 PowerMockito.mockStatic(StaticClass.class); // mock 初始化类的方法 InitClass initObj = PowerMockito.mock(InitClass.class); PowerMockito.whenNew(InitClass.class).withNoArguments().thenReturn(initObj); PowerMockito.doNothing().when(initObj).initMethod(); // 执行初始化方法 new InitClass().initMethod(); // 验证静态方法是否被调用 PowerMockito.verifyStatic(Mockito.times(1)); StaticClass.staticMethod(); } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值