Mockito → MockK

Mockito → MockK

老写法(Java + Mockito)

java 复制代码
@Mock ApiService apiService;
@Captor ArgumentCaptor<String> captor;

@Test
public void test() {
    when(apiService.loadItems()).thenReturn(items);
    verify(apiService, times(1)).loadItems();
}

问题在哪里

Mockito 对 Kotlin 的支持不够好------final 类和 final 方法在 Kotlin 中默认不可 mock,需要额外配置。不支持 suspend 函数(除非用 mockito-kotlin 桥接库)。语法是 Java 风格的 when(...) 而非 Kotlin 惯用的 DSL。

新写法(MockK)

kotlin 复制代码
// 基础用法 --- 和 Mockito 相似但更 Kotlin 化
@MockK lateinit var apiService: ApiService

@Test
fun test() = runTest {
    every { apiService.loadItems() } returns items
    viewModel.loadItems()
    verify(exactly = 1) { apiService.loadItems() }
}

// suspend 函数 --- MockK 原生支持
coEvery { apiService.loadItems() } returns items
coVerify { apiService.loadItems() }

// Slot --- 替代 ArgumentCaptor
val slot = slot<String>()
every { apiService.search(capture(slot)) } returns items
viewModel.search("query")
assertEquals("query", slot.captured)

// relaxed mock --- 所有方法自动返回默认值
@RelaxedMockK lateinit var repo: ItemRepository

一句话注意

MockK 是 Kotlin 原生的 mocking 库,every {} 替代 when()verify {} 替代 verify()coEvery/coVerify 处理 suspend 函数。最重要的是 MockK 不需要 mock-maker-inline 配置就能 mock final 类,Kotlin 的默认行为就是 final。

Mockito 的 argThat(argumentMatcher) 在 MockK 里用 lambda:match<Item> { it.id == 1 },比 Java 的 ArgumentMatcher 简洁很多。


Java Android 老项目迁移系列,持续更新中。

相关推荐
赵广陆2 小时前
Spring AI的聊天模型
java·人工智能·spring
IT 小阿姨(数据库)2 小时前
K8s v1.24.17 完整搭建文档(CentOS7 + containerd1.6.33 + Calico)
java·容器·kubernetes
lhldsg3 小时前
全民健身解决方案:从共享球场到智能运营的技术实践
java·大数据·开发语言·需求分析
vipxieliang3 小时前
ValidX时间注解完全指南:10种时间验证注解详解
java·后端
字节暗面3 小时前
四款 APP 加固强度测评:让 AI 拆了四个包,结果有点出乎意料
android·逆向工程·加固
雨辰AI3 小时前
openGauss 生产运维避坑指南|适配信创项目改造核心难点
java·运维·后端
网安蟹佬霸3 小时前
蓝队防御实战:SIEM与SOAR构建安全运营中心(万字详解+实战配置)
android·安全·web安全·网络安全·网安
名字还没想好☜3 小时前
Java 21 switch 模式匹配实战:sealed 接口 + record 替代 if-instanceof 链
java·人工智能·后端·python·spring
devilnumber3 小时前
Java 30 组高频技术 / 知识点多角度对比
java·开发语言
摇滚侠3 小时前
《SpringBoot 3:入门与应用实战》第 6 章 Spring Boot 最佳实践 阅读笔记 10
java·spring boot·笔记