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

JUnit测试中如何Mock父类方法super.getUserForUID的返回值?

如何Mock子类中调用的父类方法返回值

针对你遇到的问题,直接通过Spy对象mock父类方法时,若使用常规的when(...).thenReturn(...)会触发真实父类方法执行,正确的做法是使用Mockito的doReturn()语法来跳过真实调用,直接指定返回值:

具体步骤

  1. 先创建一个模拟的User对象,用于指定返回值:
User mockUser = new User();
// 根据测试需求设置mockUser的属性,比如mockUser.setId("testId");
  1. 使用doReturn()来mock父类的getUserForUID方法,避免触发真实逻辑:
doReturn(mockUser).when(customerUserService).getUserForUID(anyString());

这里的anyString()是Mockito的参数匹配器,可根据实际测试场景替换为具体的userId值。

  1. 调用待测试的getUserForID方法,此时super.getUserForUID(userId)会返回你预先设置的mockUser,从而可以专注测试方法内后续的业务逻辑:
User result = customerUserService.getUserForID("testUserId");
// 对result进行断言验证

为什么之前的方式无效

当使用Spy对象时,when(spyObject.method()).thenReturn(...)的语法会先执行一次真实的方法调用,再将返回值替换为你指定的对象,这就是为什么父类的真实逻辑仍然会被执行。而doReturn().when(spyObject).method()则是直接指定返回值,不会触发任何真实方法的调用,完美适配你的测试场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:20:12