SuperAPI AI 工具集

writing-tests-with-kotlin-test

测试与质量

查看项目

更新于 10-16 02:31

技能介绍

用途:kotlin.test 是 Kotlin 自带的轻量测试库,提供与框架无关的 assert* 函数以及 @Test/@BeforeTest/@AfterTest 注解,注解会 typealias 到类路径上的运行器(JUnit4、JUnit5、TestNG、JS/Native 运行器)。写一次 import kotlin.test.*,同一测试源码即可在 commonTest、JVM 和所有 Kotlin Multiplatform 目标上编译。

主要能力:覆盖断言 API、@OnlyInputTypes 编译期类型保护、Asserter 扩展点与 Gradle 接线。常用断言包括 assertEquals/assertNotEquals(含浮点容差重载)、assertSame/assertNotSame、assertNull/assertNotNull、assertIs<T>/assertIsNot<T>、assertContentEquals(有序内容比较)、assertContains、assertTrue/assertFalse、fail、expect、assertFails/assertFailsWith<E>。@OnlyInputTypes 使类型不匹配成为编译错误而非运行时失败。

使用方式:JVM/Android 模块添加 testImplementation(kotlin("test"));多平台模块在 commonTest 源集添加 implementation(kotlin("test"))。kotlin("test") 是基于能力的依赖(Kotlin 1.4+),JVM 上默认解析为 JUnit4 变体,若 Test 任务配置 useJUnitPlatform() 则解析为 JUnit5 变体,也可显式依赖 kotlin-test-junit、kotlin-test-junit5、kotlin-test-testng、kotlin-test-js 等适配器。注解从 kotlin.test 导入,而非 org.junit。异常用 assertFailsWith<E> { … } 检查并返回异常以便断言 message/cause。

适用场景:多平台模块的 commonTest;希望 JVM、Android、JS、Native 使用同一套断言词汇;需要 assertFailsWith、assertContentEquals、assertIs、expect 等调用。

限制:kotlin.test 刻意保持最小范围,不提供 AssertJ/Truth/Kotest 式流式断言、软断言或集合匹配器;Android 仪器测试的运行器配置、协程/Flow 的 runTest 与 Turbine、Compose UI 断言均属其他技能。JVM 上若移除 kotlin-test-junit/junit5 适配器,失败会退化为无 diff 的 AssertionError。不要用 as Any 等类型放宽来消除 @OnlyInputTypes 编译错误,也不要在 Set 上调用 assertContentEquals(已废弃且语义含糊),应改用 assertEquals。