帮助开发者用 Kotest、MockK 与协程测试构建高质量 Kotlin 测试体系。
复制安装指令,让 AI 自动完成配置 · 推荐新手
请帮我安装 askskill 上的 "kotlin-testing" 技能: 1. 下载 https://raw.githubusercontent.com/affaan-m/ECC/main/skills/kotlin-testing/SKILL.md 2. 保存为 ~/.claude/skills/kotlin-testing/SKILL.md 3. 装好后重载技能,告诉我可以用了
请为这个 Kotlin 协程服务编写单元测试,使用 Kotest 和 MockK,覆盖成功、异常和取消场景,并说明测试结构为何这样设计。
产出一组符合 Kotlin 惯用法的协程单元测试代码,并附上测试设计说明。
我有一段 Kotlin 业务逻辑代码,请按 TDD 方法先列出测试用例,再给出重构后的实现,测试框架用 Kotest,并补充必要的 MockK mock 示例。
先得到测试清单与测试代码,再得到可通过测试的重构实现方案。
针对这个 Kotlin 数据转换函数,设计 property-based testing 用例,并结合 Kover 给出覆盖率提升建议,指出遗漏的边界条件。
返回属性测试示例、关键边界条件分析,以及可执行的覆盖率改进建议。
Comprehensive Kotlin testing patterns for writing reliable, maintainable tests following TDD methodology with Kotest and MockK.
./gradlew koverHtmlReport and verify 80%+ coverageThe following sections contain detailed, runnable examples for each testing pattern:
RED -> Write a failing test first
GREEN -> Write minimal code to pass the test
REFACTOR -> Improve code while keeping tests green
REPEAT -> Continue with next requirement
// Step 1: Define the interface/signature
// EmailValidator.kt
package com.example.validator
fun validateEmail(email: String): Result<String> {
TODO("not implemented")
}
// Step 2: Write failing test (RED)
// EmailValidatorTest.kt
package com.example.validator
import io.kotest.core.spec.style.StringSpec
import io.kotest.matchers.result.shouldBeFailure
import io.kotest.matchers.result.shouldBeSuccess
class EmailValidatorTest : StringSpec({
"valid email returns success" {
validateEmail("[email protected]").shouldBeSuccess("[email protected]")
}
"empty email returns failure" {
validateEmail("").shouldBeFailure()
}
"email without @ returns failure" {
validateEmail("userexample.com").shouldBeFailure()
}
})
// Step 3: Run tests - verify FAIL
// $ ./gradlew test
// EmailValidatorTest > valid email returns success FAILED
// kotlin.NotImplementedError: An operation is not implemented
// Step 4: Implement minimal code (GREEN)
fun validateEmail(email: String): Result<String> {
if (email.isBlank()) return Result.failure(IllegalArgumentException("Email cannot be blank"))
if ('@' !in email) return Result.failure(IllegalArgumentException("Email must contain @"))
val regex = Regex("^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$")
if (!regex.matches(email)) return Result.failure(IllegalArgumentException("Invalid email format"))
return Result.success(email)
}
// Step 5: Run tests - verify PASS
// $ ./gradlew test
// EmailValidatorTest > valid email returns success PASSED
// EmailValidatorTest > empty email returns failure PASSED
// EmailValidatorTest > email without @ returns failure PASSED
// Step 6: Refactor if needed, verify tests still pass
class CalculatorTest : StringSpec({
"add two positive numbers" {
Calculator.add(2, 3) shouldBe 5
}
"add negative numbers" {
Calculator.add(-1, -2) shouldBe -3
}
"add zero" {
Calculator.add(0, 5) shouldBe 5
}
})
…
通过双评审智能体对结果进行对抗式校验,提升输出发布前的可靠性
帮助你系统掌握 Rust 测试模式与 TDD 实践,提升代码质量与可维护性。