如何在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
相关产品推荐
相关产品推荐

