目录MockK 简介环境配置基础用法高级用法Android 特有场景最佳实践1. MockK 简介MockK 是一个专为 Kotlin 设计的 Mocking 框架,支持协程、扩展函数、对象声明(object)等 Kotlin 特性。 环境配置在 build.gradle 中添加依赖:// 模块级 build.gradledependencies { testImplementation "io.mockk:mockk:1.13.8 " // 基础库 testImplementation "io.mockk:mockk-agent-jvm:1.13.8" // 解决某些 JDK 版本兼容性问题 testImplementation :mockk-android:1.13.8"。
掌握 Kotlin Android 单元测试:MockK 框架深度实践指南在 Android 开发中,单元测试是保障代码质量的核心手段。 本文将带你深入 MockK —— 一款专为 Kotlin 设计的 Mock 框架,通过 20+ 真实场景代码示例,助你彻底掌握 MockK 的精髓。一、为什么选择 MockK? 对象声明处理:轻松 Mock object 单例类扩展函数支持:无需特殊配置即可模拟扩展方法DSL 语法糖:代码简洁程度提升 50%1.2 性能对比框架 启动时间内存占用Kotlin 适配度MockK :mockk:1.13.8") testImplementation("io.mockk:mockk-agent-jvm:1.13.8") // 解决 JDK 17+ 兼容问题 androidTestImplementation ("io.mockk:mockk-android:1.13.8") // 仪器化测试 testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test
官网:ktlint.github.io mockk Kotlin 的 mock 测试库,不仅支持常规的单元测试,还支持在真机或模拟器上运行的 instrumented 测试。 [1240] mockk 提供了全面、强大的特性,可以 mock 类、对象、私有函数、协程等多种结构(Android P 之前的版本 instrumented 测试有少数特性不支持)。 官网:mockk.io KOIN 面向 Kotlin 开发者的轻量依赖注入框架。 [1240] KOIN 提供了轻量的函数式依赖注入 DSL,无需代码生成和反射。
Mockk—static method—AndroidP mockK声称支持静态方法的mock,然后试验了一下在荣耀V9的表现: ? 所以想mock静态方法的,找找AndroidP的手机吧。 环境配置 IDE本身没有太多需要配置的,代理配置好就ok 如何Mock 无返回值的方法: 暂时没找到和mockito一样的处理(mockito有专门对应void返回类型的几条语句),下面是mockk网站上一个类似的方案
name", githubUser.name) Assert.assertEquals("url", githubUser.reposUrl) } } } 在这里我使用的是 KHttp 和 mockk 另外,我们可以用一种更奇幻的方式测试我们的 presenter : @Test fun testLogin() = runBlocking { val apiClient = mockk<SuspendingApiClient.SuspendingApiClientImpl mock 一个挂起函数的代码是这样的: given { runBlocking { apiClient.login(any()) } }.willReturn (githubUser) 相比 mockk
图片来源:https://technology.lastminute.com/contract-testing-asynchronous-messaging-pact-junit-mockk/ eBay
测试体系构建分层测试策略实施:单元测试:使用JUnit 5 + MockK验证业务逻辑集成测试:通过TestContainers模拟外部服务UI测试:采用Espresso + Compose Test实现声明式测试性能测试
MockK MOCKK 是用 Kotlin 编写的模拟库。它的核心理念是像 Coroutines 和 Lambda 表达式一样,为 Kotlin 提供一等公民级别的语言特性支持。
相比 JUnit, JTest, Mockito, Mockk 等一堆 Compiling testing 工具,其它工具需要每个方法都写一大堆测试代码,需要开发成本、需要解决测试代码的 bug、业务代码更改后需要同步修改测试代码等
利用该功能实现了很多我们熟知的开发工具,从 Android Studio 中的 Network 及 Memory 分析器,到调试器中的模拟框架,如 dexmaker-mockito-inline、MockK
Maven Central、Gradle Plugins、JitPack Swift Package Manager、CocoaPods、Carthage 测试框架 JUnit、Kotlin Test、Mockk
MockK MOCKK 是用 Kotlin 编写的模拟库。它的核心理念是像 Coroutines 和 Lambda 表达式一样,为 Kotlin 提供一等公民级别的语言特性支持。
testGetIpString() { val sp = mock<SharedPreferences>().apply { every { edit() } returns mockk
此外,我们的项目团队也在采用该语言(Ktor、MockK、Detekt、HTTP4K)。
编码规范:Kotlin 风格指南、命名统一 静态检查:Lint、Detekt、ktlint 单元测试 & UI 测试:JUnit、MockK、Espresso CI/CD:GitLab CI 自动打包、