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

使用JUnit和Mockito测试时如何处理模型类创建的变量?

单元测试实现方案

针对你提到的List<User> user = daoUser.get(userID); 代码的单元测试mock逻辑,你不需要对等式左侧的List<User>或者User类做特殊的mock处理,左侧仅为存储返回结果的变量引用,只需要构造好右侧mock方法的返回值即可,具体实现步骤如下:

  • 首先确保你已经完成daoUser实例的mock:可以通过@Mock注解标注,或者手动调用Mockito.mock(DaoUser.class)生成mock对象,并且已经把mock的daoUser注入到你要测试的类中
  • 绝大多数场景下User作为POJO实体类不需要mock,直接构造真实的User对象、填充测试需要的字段值即可,只有当User的构造逻辑引入外部依赖、或者包含复杂计算逻辑会干扰测试时,才需要mockUser类
  • 最后通过Mockito的when语法绑定daoUser.get方法的返回值即可

示例代码

普通场景(推荐,不mock User类)

// 构造测试需要的用户列表
List<User> testUserList = new ArrayList<>();
User testUser = new User();
testUser.setId(userID);
testUser.setUsername("test001");
// 按需填充其他测试需要的User字段
testUserList.add(testUser);

// 绑定dao方法返回
when(daoUser.get(eq(userID))).thenReturn(testUserList);

特殊场景(需要mock User类)

// mock User实例,按需mock对应get方法的返回值
User mockUser = Mockito.mock(User.class);
when(mockUser.getId()).thenReturn(userID);
when(mockUser.getUsername()).thenReturn("test001");
// 按需mock其他需要用到的User方法

// 构造列表装载mock的User实例
List<User> mockUserList = new ArrayList<>();
mockUserList.add(mockUser);

// 绑定dao方法返回
when(daoUser.get(eq(userID))).thenReturn(mockUserList);

注意:单元测试中只需要mock你当前测试用例依赖的方法返回即可,不需要mockUser类的所有方法,避免产生冗余代码。

内容的提问来源于stack exchange,提问作者Hristo.L

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:45:07