java静态方法获取对象_JavaPowerMockito模拟单个静态方法和返回对象

小编典典

你想要做的是1的一部分和2的全部的组合。

你需要使用PowerMockito.mockStatic为类的所有静态方法启用静态模拟。这意味着可以使用when-thenReturn语法对它们进行存根。

但是,当你调用尚未在模拟实例上显式存根的方法时,你正在使用的2个参数的mathStatic重载为Mockito / PowerMock应该执行的操作提供了默认策略。

从javadoc:

创建具有指定策略的类模拟,以解决交互问题。这是一个非常高级的功能,通常你不需要它来编写不错的测试。但是,在使用旧系统时可能会有所帮助。这是默认答案,因此仅当你不存根方法调用时才会使用它。

该默认默认磕碰的策略是只返回NULL,0或假的对象,数量和布尔值的方法。通过使用2-arg重载,你说的是“不,不,不,默认情况下,使用此Answer子类的answer方法获取默认值。它返回Long,因此,如果你有静态方法返回的值与长期存在问题。

而是使用模拟静态的1-arg版本启用静态方法的存根,然后使用when-thenReturn指定对特定方法执行的操作。例如:

import static org.mockito.Mockito.*;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.mockito.invocation.InvocationOnMock;

import org.mockito.stubbing.Answer;

import org.powermock.api.mockito.PowerMockito;

import org.powermock.core.classloader.annotations.PrepareForTest;

import org.powermock.modules.junit4.PowerMockRunner;

class ClassWithStatics {

public static String getString() {

return "String";

}

public static int getInt() {

return 1;

}

}

@RunWith(PowerMockRunner.class)

@PrepareForTest(ClassWithStatics.class)

public class StubJustOneStatic {

@Test

public void test() {

PowerMockito.mockStatic(ClassWithStatics.class);

when(ClassWithStatics.getString()).thenReturn("Hello!");

System.out.println("String: " + ClassWithStatics.getString());

System.out.println("Int: " + ClassWithStatics.getInt());

}

}

字符串型静态方法被存根以返回“ Hello!”,而整数型静态方法使用缺省的存根,返回0。

2020-03-06

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值