Mockito 的 mock() 方法创建模拟对象替代真实依赖,使测试聚焦被测代码;默认返回合理值(null/0/false),需配合 when().thenReturn() 设定行为,并用 verify() 验证调用,但不执行构造逻辑或替换 new 出的私有成员。

Mockito 的 mock() 方法用于创建一个模拟对象(mock object),它能替代真实对象参与测试,避免依赖外部系统或复杂逻辑。核心是让测试聚焦在被测代码本身,而不是它的协作者。
mock() 创建基础模拟对象
调用 Mockito.mock(Class) 可生成指定类型的空实现对象。该对象所有方法默认返回“合理默认值”(如 null、0、false),不会执行原始逻辑。
UserService userService = mock(UserService.class);- 此时
userService.findById(1L)会直接返回null(因为返回类型是User) - 若方法返回基本类型(如
int),默认返回0;返回boolean则为false
配合 when().thenReturn() 控制行为
仅用 mock() 不够,需搭配 when(...).thenReturn(...) 指定特定调用的返回值,才能让测试可预测。
when(userService.findById(1L)).thenReturn(new User("Alice"));- 之后只要代码调用
userService.findById(1L),就返回这个预设的User对象 - 支持链式调用:多个
when可分别设定不同参数的行为
验证是否被正确调用
创建 mock 后,常用 verify() 检查目标方法是否按预期被调用,确保业务逻辑触发了协作对象的正确操作。
立即学习“Java免费学习笔记(深入)”;
-
service.processUser(user);(被测方法内部调用了userService.save(user)) -
verify(userService).save(user);—— 验证save确实被调用一次 - 也可验证调用次数:
verify(userService, times(2)).save(user);
注意构造器与私有成员不自动处理
mock() 创建的是代理对象,并非通过真实构造器实例化,因此:
- 构造函数里的逻辑(如初始化、资源加载)不会执行
- 类中直接 new 出来的依赖(如
private DBUtil db = new DBUtil();)也不会被替换,仍走真实逻辑 - 如需控制这类内部对象,应改用依赖注入(如构造器传入),再对依赖项单独 mock


















