使用Powermock工具mock静态方法代码示例

对于Mockito和Powrmock的一些使用介绍和配置可以看Mockito配合powermock工具mock构造函数这篇文章。

假如有Demo类的getName方法需要做单元测试,代码如下:

public class Demo {

    public String getName() {
        String name = "name";
        String str1 = "str1", str2 = "str2";
        if (name.equals(Tools.concat(str1, str2))) {
            name = "str";
        }
        return name;
    }
}

如果测试的时候并不需要关心Tools.concat(str1,str2)结果,所以需要对concat方法mock。

Tools类的代码如下:

public class Tools {

    public static String concat(String str1, String str2) {
        return str1 + str2;
    }
}

测试代码示例如下:

@RunWith(PowerMockRunner.class)
@PrepareForTest({Tools.class})
public class DemoTest {

    @Test
    public void testGetName() {
        // 注意使用mockStatic,把这个类的静态方法都mock了
        PowerMockito.mockStatic(Tools.class);

        PowerMockito.when(Tools.concat("str1", "str2")).thenReturn("str");

        assertEquals("name", new Demo().getName());

    }
}

说明如下:

1. 类上使用注解@RunWith(PowerMockRunner.class)

2. 使用注解@PrepareForTest({Tools.class})-->>>这个注解的值是需要mock的类,@PrepareForTest的说明可以看Mockito配合powermock工具mock构造函数这篇文章。

3. 代码中调用mockStaic 方法:(注意,这样会把Tools类的所有静态方法mock了,其它静态方法不设定返回值的时候,调用的时候就会返回默认值了(这个问题可以考虑场景有多种方案解决,比如使用spy或者@PrepareForTest作用范围或者需要的时候mock其它静态方法设置返回值)。

PowerMockito.mockStatic(Tools.class);

4. mock concat方法设置期望的返回值:

PowerMockito.when(Tools.concat("str1", "str2")).thenReturn("str");

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不识君的荒漠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值