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 老项目迁移系列,持续更新中。

相关推荐
步行cgn12 分钟前
Spring 注入 Properties 详解
java·python·spring
星空13 分钟前
Map<String, String>`Map`是接口,不能直接 new
java·前端·算法
liangbo713 分钟前
12-JVM 调优方法论与参数速查
java·jvm
干到60岁退休的码农15 分钟前
16.过滤器中处理异常响应返回
java·spring boot·mybatis
00后程序员张23 分钟前
怎么用 Egret(白鹭引擎)打包 iOS 应用并上架 App Store?
android·ios·小程序·https·uni-app·iphone·webview
JMchen26 分钟前
第 8 篇|本地存储技术选型 —— SP 与文件读写
kotlin·android studio
Java_2017_csdn27 分钟前
StringUtils.hasText() 和 StringUtils.isNotBlank() 方法对比
java
Joy T28 分钟前
Spring AI 2.0 进阶入门:RAG、Structured Output 与 Agent 信息闭环
java·人工智能·spring·rag·springai·agent入门
xiaoqiMikko37 分钟前
jackson-databind 又出 4 条,Dependabot 一条都不报:2.21.5 还差 3 条
java·安全
無限進步D39 分钟前
VSCode 简介+安装+JavaWeb前端常用插件+简单配置
java·开发语言·css·vscode·html·css3·插件