KMP Snapshot Testing Setup 是一个用于为 Kotlin Multiplatform + Compose Multiplatform 项目一次性搭建快照测试(Snapshot Testing)基础设施的技能。它通过约定插件、测试模块与脚本,把基于 Kotest 的属性测试(PBT)与快照比对能力接入项目。
用途
该技能面向需要为 KMP/Compose 项目引入快照测试的开发者,负责生成整套测试基础架构:约定插件、核心测试模块、Compose 测试模块、Shell 脚本,以及在目标模块中启用相关插件。
主要能力
根据介绍,搭建内容包括以下部分:
- Convention Plugins:convention-kmp-test.gradle.kts 为 commonTest/jvmTest 提供公共依赖;convention-kmp-snapshot-testing.gradle.kts 注册 jvmSnapshotTest 源集以及 Record/Verify/Report 任务;SnapshotReportTask.kt 生成快照差分报告。
- 核心测试模块(core-testing-snapshot,共 25 个文件):包含 ProjectConfig.kt(Kotest 配置,如 Dispatchers.setMain、PBT 迭代次数、报告器),testing/snapshot 下的 ShouldMatchSnapshot.kt(以 Kotlin Code 形式保存值快照)、StateHolderSnapshotPbtSpec.kt(StateHolder/ViewModel PBT,0-20 Arb)、LogicSnapshotPbtSpec.kt(逻辑 PBT,1-20 Arb)、SnapshotSpec.kt、PbtActionScope.kt、PbtSnapshotReport.kt,以及 code/KotlinCodeFormat.kt(kotlinx.serialization 的 Kotlin Code 输出)和 internal 下的 SnapshotRegistry、TextDiff、ImageDiff、OrphanedSnapshotDetector 等;testing/property 下提供 Arb.suspendFunction()/FakeSuspendFunction 与 Arb.basicString()(多语言 Unicode)。
- Compose 测试模块(ui-core-testing,2 个文件):ComposeSnapshot.kt 提供 runComposableSnapshotTest() 辅助函数;ComposeSnapshotPbtSpec.kt 提供 Compose PBT(0-20 Arb,覆盖 Density/ScreenSize/Theme)。
- Shell 脚本:tools/snapshot-diff.sh 及 step 脚本。
使用方式
使用前需确认:项目结构(是否存在 build-logic 目录、已有约定插件)、测试基础设施模块路径(默认 core/testing/snapshot 与 ui/core/testing)、包名(从现有结构推断)、设置范围(约定插件、核心测试模块、Compose 测试模块、Shell 脚本,默认为全部)。
设置步骤:
- 依赖添加:在 gradle/libs.versions.toml 中加入 kotest、turbine、kotlinx-coroutines-test 等条目。
- 创建约定插件:将示例 build-logic 文件复制到 build-logic/src/main/kotlin/,并替换 kotest.framework.config.fqn 与模块路径等项目相关值。
- 创建测试基础设施模块:复制 core-testing-snapshot 与 ui-core-testing 的文件,并替换包名。
- 放置 Shell 脚本:复制 tools 目录并赋予 snapshot-diff.sh 可执行权限。
- 配置根 build.gradle.kts:注册 cleanSnapshotOutputDir 任务。
- 在目标模块的 build.gradle.kts 中应用 id("convention-kmp-snapshot-testing")。
- 构建确认:运行 ./gradlew compileKotlinJvm。
适用场景
适用于希望在 KMP + Compose Multiplatform 项目中引入快照测试与属性测试的团队,尤其是需要统一约定插件、跨模块复用测试基础设施、并对 StateHolder/ViewModel 逻辑及 Compose UI 进行快照与 PBT 验证的场景。
限制
介绍中未提供收费、价格、平台支持范围、版本兼容性等细节,暂未提供相关信息。各步骤中的版本号(如 kotest、turbine)由用户按最新版本自行调整。