使用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你当前测试用例依赖的方法返回即可,不需要mock
User类的所有方法,避免产生冗余代码。
内容的提问来源于stack exchange,提问作者Hristo.L
相关产品推荐
相关产品推荐

