SuperAPI AI 工具集

android-unit-testing

测试与质量

查看项目

更新于 10-15 20:31

技能介绍

用途:在 JVM 的 src/test 下验证业务风险点,而不是用真机测试替代领域与 ViewModel 的单元测试;Compose UI 插桩测试属于另一技能。

主要能力:JUnit 4/5 作为 runner 与断言;kotlinx-coroutines-test 提供 runTest、TestDispatcher、advanceUntilIdle;Turbine 用于 Flow 断言;Fake 替代仓库、时钟、数据源;MockK/Mockito 仅在项目已使用时采用;需要轻量 Android 框架时用 Robolectric。优先 Fake 而非 Mock,不为简单测试引入 MockK/Robolectric。

优先覆盖:ViewModel 的 loading/success/error 与鉴权;用例和领域策略;DTO 与领域模型映射;解析/校验;缺陷回归(bug 转测试);纯状态 holder/reducer。

使用方式:目录结构同 main 镜像,测试类命名如 FooViewModelTest、ParseCursorTest。涉及 viewModelScope 与 Main 时用 Dispatchers.setMain(StandardTestDispatcher()) 并在 finally 中 resetMain;避免 Thread.sleep,改为推进 scheduler。Flow 可用 Turbine 的 test { awaitItem() ... cancelAndIgnoreRemainingEvents() }。参数化可用表驱动,失败消息写明行为。Fake 实现领域接口并按测试控制数据与失败,时钟用 fake。

限制:不在 JVM 单元测试中启动真实 Activity/Fragment(除非有理由用 Robolectric)、不用真实 Room/Retrofit、不依赖真实时间或网络、不依赖类间执行顺序。避免 mock 被测类、断言实现细节、仅联网可通过的测试、协程中不用 runTest 而用 runBlocking、以行覆盖率代替风险覆盖。

集成与验收:与 Android 开发、Jetpack Compose、MVVM 技能配合。完成标准为变更风险已在 src/test 覆盖、协程确定性、边界用 Fake 且断言可读、无明显 flakiness,且被改模块的 ./gradlew test 通过;CI 中在 PR 运行 ./gradlew test,昂贵插桩测试放独立流水线。