| 作者: | Ken Kousen |
| 语言: | 英文 |
| 出版年份: | 2023 |
| 编程语言: | Java |
| 下载链接: |
书籍均收集自互联网,仅供学习和研究使用,请莫用于商业用途。谢谢合作。 |
| 章节 | 关键词 | 一句话提炼 |
|---|---|---|
| Ch1 测试地基 | 依赖倒置、假对象、集成→单元 | 先让代码可测,再谈 Mockito 魔法 |
| Ch2 API 速通 | @Mock、@InjectMocks、when/then、verify | 5 步套路:创建-预期-注入-执行-验证 |
| Ch3 参数匹配 | any*()、eq()、argThat、intThat、InOrder | 用“模糊匹配”替代硬编码,让测试更通用 |
| Ch4 高阶场景 | void 方法、BDD、ArgumentCaptor、Answer、Spy | 无返回值、动态返回值、捕获实参、部分打桩一次搞定 |
| Ch5 特殊武器 | final、static、构造器、Spring @MockBean | 告别“无法继承”“无法注入”等历史包袱 |
| 附录 | JUnit4/5 配置、Gradle/Maven 坐标 | 复制即可跑通 |
| 术语 | 本质 | 用途 | 是否记录交互 |
|---|---|---|---|
| Stub 存根 | 假实现 | 提供固定返回值 | × |
| Mock 模拟 | Stub + 记录 | 验证调用次数/顺序 | √ |
| Spy 间谍 | 包装真对象 | 部分打桩 + 监听 | √ |
Mockito.*,代码量减半when/thenReturn 链式写法,一次返回多值:when(dao.findById(anyInt())).thenReturn(p1, p2, p3);doThrow().when(x).send() 避免编译错误given(x).willReturn() + then(x).should(),产品经理也读得懂@Captor ArgumentCaptor<Person> captor; 精准校验内部构造的对象thenAnswer(inv -> inv.getArgument(0) + "OK") 让输出依赖输入InOrder inOrder = inOrder(mockA, mockB); 跨多对象校验时序verifyNoMoreInteractions(mock) 防止“意外调用”mockito-inline 一键开启 final、static、构造器打桩@MockBean 替换上下文,自动注入到被测 Service“太空宇航员”项目:
AstroGateway 调开放 API → 返回 JSONAstroService 统计各飞船人数 → Map<String, Long>Publisher-Subscriber:
send() 方法返回 void,传统测试无从下手;用 mock Subscriber 验证 receive() 调用次数与顺序,展示“无返回值也能测”。
Wiki 生物抓取:
依赖 WikiUtil.staticGetExtract(),用 MockedStatic<WikiUtil> 在 try-with-resources 块内完成静态打桩,兼顾性能与隔离。
> 如果你曾因“外部依赖不可测”而放弃单元测试,《Mockito Made Clear》 提供了一条“先替身、后重构、再回归”的清晰路径:
> 让测试像呼吸一样自然,让重构像散步一样安全。