You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JUnit5中Mock私有方法调用,跳过非测试重点方法?

JUnit5 跳过私有方法测试的实现方案

针对你要测试testA方法但跳过私有方法priMethod的需求,结合JUnit5环境且无法修改源码的限制,可以使用Mockito Spy + 反射的方式实现类似doSomething().when()的存根逻辑,具体步骤如下:

实现步骤与代码示例

首先确保你的测试依赖中包含mockito-core和mockito-junit-jupiter(用于JUnit5与Mockito的整合),然后编写测试类:

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import java.lang.reflect.Method;

@ExtendWith(MockitoExtension.class)
public class ATest {

    @Test
    void testTestA() throws Exception {
        // 创建目标类的Spy实例:保留真实对象的大部分逻辑,仅存根指定方法
        A aInstance = Mockito.spy(new A());

        // 通过反射获取私有方法priMethod,并设置为可访问
        Method priMethod = A.class.getDeclaredMethod("priMethod");
        priMethod.setAccessible(true);

        // 存根私有方法,调用时执行doNothing()(即跳过原有逻辑)
        Mockito.doNothing().when(aInstance, priMethod).invoke();

        // 执行待测试的testA方法
        aInstance.testA();

        // 此处可添加断言,验证testA中除priMethod外的其他逻辑是否正确执行
    }
}

方案说明

  • @ExtendWith(MockitoExtension.class):让JUnit5测试类支持Mockito的注解与功能
  • Spy对象:不同于完全Mock的对象,Spy会保留真实类的所有原有逻辑,仅对指定存根的方法做替换,适合你需要测试testA大部分逻辑、仅跳过priMethod的场景
  • 反射处理私有方法:由于priMethod是私有方法,需要通过反射获取并设置可访问权限,才能被Mockito存根
  • doNothing().when(...):完全符合你想要的类似语法,实现调用priMethod时跳过原有逻辑的效果

内容的提问来源于stack exchange,提问作者user23246230

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 17:12:50