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

Quarkus+JUnit:如何仅Mock类中单个方法并保留其余方法真实实现

解决方案:使用Mockito Spy实现部分Mock

你当前用Mockito.mock(Service.class)创建的是完全模拟对象,所有未显式配置的方法都会返回默认值(如null),这就是doOtherStuff()返回null导致测试失败的原因。要仅MockcallDatabase()方法、同时保留其他方法的真实逻辑,需要使用Mockito的Spy(间谍对象)——它基于真实对象创建代理,只会替换你指定的方法行为。

具体实现步骤

  1. 创建或获取Service的真实实例
  2. 用Mockito.spy()包装真实实例生成Spy对象
  3. 对Spy对象的callDatabase()方法设置Mock行为
  4. 通过QuarkusMock安装这个Spy对象

代码示例

// 1. 获取真实的Service实例(若有依赖,可通过Quarkus依赖注入获取,或手动实例化)
Service realService = new Service();
// 若使用Quarkus依赖注入:
// @Inject Service realService;

// 2. 基于真实实例创建Spy对象
Service spyService = Mockito.spy(realService);

// 3. 仅Mock callDatabase()方法,设置为不执行任何操作
Mockito.doNothing().when(spyService).callDatabase(any(), any(), any());

// 4. 将Spy对象安装到Quarkus测试环境
QuarkusMock.installMockForType(spyService, Service.class);

原理说明

  • Spy对象默认会执行真实对象的方法逻辑,只有被显式配置Mock行为的方法(如callDatabase())会走Mock逻辑
  • Mockito.mock()创建的是完全模拟对象,所有方法默认不执行真实逻辑,返回对应类型的默认值(引用类型返回null,基本类型返回对应初始值)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 09:40:02