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

使用PowerMockito如何对私有方法进行单元测试

原创
作者头像
半月无霜
发布2024-07-16 10:12:35
690
发布2024-07-16 10:12:35
举报
文章被收录于专栏:半月无霜半月无霜

使用PowerMockito如何对私有方法进行单元测试

一、介绍

在上一篇文章中,讲解了公共方法调用私有方法的测试,我们只想对公共方法进行验证测试,私有方法进行mock即可

那么在本篇中,如何对私有方法进行单元测试呢?

二、代码

需要测试的类与私有方法,仅贴出关键代码,实体类什么的就没必要贴了

代码语言:javascript
复制
package com.banmoon.service.impl;
​
import com.banmoon.mapper.PowerMockitoMapper;
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 {
​
    private final PowerMockitoMapper powerMockitoMapper;
​
    private void privateMethodNeedTest() {
        PowerMockitoEntity entity = new PowerMockitoEntity();
        entity.setId(1);
        entity.setValue("1");
        entity.setStatus(true);
        powerMockitoMapper.updateById(entity);
    }
​
}

那么这个单测也很简单,只需要这样

代码语言:javascript
复制
package com.banmoon.powerMockitoTest;
​
import com.banmoon.mapper.PowerMockitoMapper;
import com.banmoon.service.impl.PowerMockitoServiceImpl;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.modules.junit4.PowerMockRunner;
​
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
​
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.verify;
​
/**
 * @author banmoon
 * @date 2024/07/15 19:41:37
 */
@RunWith(PowerMockRunner.class)
public class PrivateMethodNeedTest {
​
    @Mock
    private PowerMockitoMapper powerMockitoMapper;
​
    @InjectMocks
    private PowerMockitoServiceImpl powerMockitoServiceImplUnderTest;
​
    @Test
    public void testPrivateMethodNeedTest() throws InvocationTargetException, IllegalAccessException {
        // 设置参数
        PowerMockito.when(powerMockitoMapper.updateById(any())).thenReturn(1);
​
        // 运行测试
        Method testMethod = PowerMockito.method(PowerMockitoServiceImpl.class, "privateMethodNeedTest");
        testMethod.invoke(powerMockitoServiceImplUnderTest);
​
        // 验证结果
        verify(powerMockitoMapper).updateById(any());
    }
​
}

可以看到,在运行测试那个地方,使用了反射来执行了私有方法。

正所谓,遇事不决,反射解决

3)最后

后面找找有没有更加好用的工具类来完成这种单元测试。

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

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

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

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

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