SuperAPI AI 工具集

kmp-snapshot-testing-setup

测试与质量

查看项目

更新于 10-16 10:40

技能介绍

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 脚本,默认为全部)。

设置步骤:

  1. 依赖添加:在 gradle/libs.versions.toml 中加入 kotest、turbine、kotlinx-coroutines-test 等条目。
  2. 创建约定插件:将示例 build-logic 文件复制到 build-logic/src/main/kotlin/,并替换 kotest.framework.config.fqn 与模块路径等项目相关值。
  3. 创建测试基础设施模块:复制 core-testing-snapshot 与 ui-core-testing 的文件,并替换包名。
  4. 放置 Shell 脚本:复制 tools 目录并赋予 snapshot-diff.sh 可执行权限。
  5. 配置根 build.gradle.kts:注册 cleanSnapshotOutputDir 任务。
  6. 在目标模块的 build.gradle.kts 中应用 id("convention-kmp-snapshot-testing")。
  7. 构建确认:运行 ./gradlew compileKotlinJvm。

适用场景

适用于希望在 KMP + Compose Multiplatform 项目中引入快照测试与属性测试的团队,尤其是需要统一约定插件、跨模块复用测试基础设施、并对 StateHolder/ViewModel 逻辑及 Compose UI 进行快照与 PBT 验证的场景。

限制

介绍中未提供收费、价格、平台支持范围、版本兼容性等细节,暂未提供相关信息。各步骤中的版本号(如 kotest、turbine)由用户按最新版本自行调整。