前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用PowerMockito如何对私有方法进行mock

使用PowerMockito如何对私有方法进行mock

原创
作者头像
半月无霜
发布2024-07-15 20:47:13
870
发布2024-07-15 20:47:13
举报
文章被收录于专栏:半月无霜半月无霜

使用PowerMockito如何对私有方法进行mock

一、介绍

最近,正在进行单元测试的补充,然后就遇到了一个令人头疼的问题;

我有一个publicMethod方法,在当中调用了privateMethod方法。

我需要对publicMethod方法进行测试,但我不想测试privateMethod方法。

这单测该怎么写???

二、代码

需要测试的类与方法

代码语言:javascript
复制
package com.banmoon.service.impl;
​
import com.banmoon.service.PowerMockitoService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
​
@Slf4j
@Service
@RequiredArgsConstructor
public class PowerMockitoServiceImpl implements PowerMockitoService {
​
    @Override
    public void publicMethod(String name) {
        log.info("公共方法:{}", name);
        privateMethod(name);
    }
​
    private void privateMethod(String name) {
        log.info("私有方法:{}", name);
    }
​
}

可以看到publicMethod方法调用了privateMethod,也就是公共方法调用了私有方法。

我们需要对私有方法进行mock

代码语言:javascript
复制
package com.banmoon.powerMockitoTest;
​
import com.banmoon.service.impl.PowerMockitoServiceImpl;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
​
import static org.mockito.ArgumentMatchers.anyString;
​
/**
 * @author banmoon
 * @date 2024/07/15 18:09:02
 */
@RunWith(PowerMockRunner.class)
@PrepareForTest(PowerMockitoServiceImpl.class)
public class PublicCallPrivateMethodTest {
​
    @InjectMocks
    private PowerMockitoServiceImpl powerMockitoServiceImplUnderTest;
​
    @Test
    public void testPublicMethod() throws Exception {
        // 设置参数
        powerMockitoServiceImplUnderTest = PowerMockito.spy(powerMockitoServiceImplUnderTest);
        PowerMockito.doNothing()
                .when(powerMockitoServiceImplUnderTest, PowerMockito.method(PowerMockitoServiceImpl.class, "privateMethod", String.class))
                .withArguments(anyString());
​
        // 运行测试
        powerMockitoServiceImplUnderTest.publicMethod("name");
​
        // 验证结果
        PowerMockito.verifyPrivate(powerMockitoServiceImplUnderTest).invoke("privateMethod", anyString());
    }
}

三、最后

注意一下,断言的位置是使用了PowerMockito.verifyPrivate(),可以对私有方法进行次数的断言

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用PowerMockito如何对私有方法进行mock
    • 一、介绍
      • 二、代码
        • 三、最后
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档