用途
本技能提供一套完整的 Kotlin 测试模式,用于编写可靠、可维护的测试,并遵循 TDD(测试驱动开发)方法论,主要工具为 Kotest 与 MockK。
适用场景包括:
- 编写新的 Kotlin 函数或类
- 为既有 Kotlin 代码补充测试覆盖
- 实现属性测试(property-based testing)
- 在 Kotlin 项目中遵循 TDD 工作流
- 配置 Kover 进行代码覆盖率统计
主要能力
TDD 工作流
遵循 RED-GREEN-REFACTOR 循环:先写失败测试(RED),再写最小实现使其通过(GREEN),然后在保持测试通过的前提下重构(REFACTOR),循环推进下一个需求。资料以 EmailValidator 为例,展示了从定义签名、编写失败测试、运行验证失败、实现最小代码、运行验证通过到重构的完整步骤。
Kotest 规格风格
- StringSpec:最简洁的写法,直接以字符串描述测试。
- FunSpec:类似 JUnit 的风格,使用 test 块。
- BehaviorSpec:BDD 风格,使用 Given/When/Then。
- DescribeSpec:RSpec 风格,使用 describe/context/it。
Kotest 匹配器
涵盖相等、字符串、集合、空值、类型、数字、异常等核心匹配器,并支持通过实现 Matcher 接口编写自定义匹配器。
MockK
包括基础模拟、relaxed 模拟、协程模拟(coEvery/coVerify/coAnswers)、参数捕获(slot/capture)、Spy 与部分模拟(spyk)。
协程测试
使用 runTest 测试挂起函数、超时场景,测试 Flow(take/toList、防抖场景),以及使用 StandardTestDispatcher 与 advanceTimeBy/advanceUntilIdle 控制执行时序。
属性测试
使用 forAll、checkAll 与 Arb 生成器验证通用性质(如字符串反转的幂等性、列表排序的幂等性、序列化往返一致性),并支持通过 Arb.bind 构建自定义生成器。
数据驱动测试
使用 withData 提供多组输入与期望值,支持自定义名称函数。
测试生命周期与夹具
使用 beforeSpec/afterSpec/beforeTest 管理数据库等资源,并可通过实现 BeforeSpecListener/AfterSpecListener 编写可复用的测试扩展。
Kover 覆盖率
通过 Gradle 配置 Kover,运行 ./gradlew koverHtmlReport 生成报告,并验证 80% 以上覆盖率。
使用方式
资料给出的典型流程为:识别目标代码 → 选择合适的 Kotest 规格风格编写测试 → 用 MockK 隔离被测单元 → 运行测试确认失败(RED)→ 实现最小代码(GREEN)→ 重构 → 运行 ./gradlew koverHtmlReport 检查覆盖率。
适用场景
适用于 Kotlin 项目的单元测试、协程与 Flow 测试、属性测试、数据驱动测试,以及需要覆盖率门禁的持续集成场景。
限制
资料未提供该技能的安装命令、依赖版本、支持的 Kotlin 或 Gradle 版本范围、平台限制、收费信息及性能数据,这些内容暂未提供。