SuperAPI AI 工具集

cometchat-android-v5-testing

测试与质量

查看项目

更新于 10-15 20:14

技能介绍

用途:本技能面向 CometChat Android 集成,讲解如何编写与运行测试,覆盖 JUnit + Mockito/MockK 单元测试、Robolectric 组件测试、Espresso UI 测试、Maestro E2E 以及 CI 集成。适用于“为集成添加测试”“如何在测试中模拟 CometChat”“搭建 E2E 测试”“聊天测试的 CI 流水线”等场景;集成搭建应使用 cometchat-android-v5-core,运行时问题排查应使用 cometchat-android-v5-troubleshooting。

主要能力与测试范围:值得测试自定义组件(自定义气泡、头部、空状态)、由 CometChat 事件触发的导航逻辑(推送点击到深链)、初始化/登录生命周期(先初始化再登录、已登录则跳过)、生产环境鉴权令牌刷新逻辑、用户 ID 映射(自有鉴权系统到 CometChat UID)。应跳过 UIKit 内部实现、实时投递(需真实服务器且不稳定)、在线状态与输入指示(存在竞态)、CometChat 组件快照测试(主题变更导致频繁变动)。判断标准:若测试因你的代码变更而失败则有价值,若因 UIKit 更新而失败则是噪声。

工具链:单元测试用 JUnit 4 + Mockito/MockK;组件测试用 Robolectric;UI 测试用 Espresso;E2E 用 Maestro(声明式 YAML 流程);CI 用 GitHub Actions 或 Bitrise。

使用方式:单元测试中通过 mockStatic 模拟 CometChatUIKit 的静态方法,例如 Java 用 Mockito 的 mockStatic(CometChatUIKit.class),Kotlin 用 MockK 的 mockkStatic(CometChatUIKit::class) 并配合 every/verify 断言登录是否被调用。Espresso 测试使用 ActivityScenarioRule 与 onView(withId(...)).check(matches(isDisplayed())) 断言视图。Maestro 流程写在 .maestro/*.yaml 中,用 launchApp、tapOn、inputText、assertVisible 等步骤描述,运行命令为 maestro test .maestro/chat-happy-path.yaml。CI 示例使用 GitHub Actions,配置 Java 17 后执行 ./gradlew test。

常见失败模式:出现 NoClassDefFoundError: CometChat 说明 SDK 未模拟,需为静态方法添加 Mockito/MockK 模拟;Espresso 测试挂起多因异步 CometChat 操作,需注册 IdlingResource;本地通过而 CI 失败通常是模拟器未启动,需在 CI 中固定模拟器 API 级别;IllegalStateException: not initialized 说明测试初始化未调用 init(),可将 isSDKInitialized() 模拟为 true。

硬性规则:每个单元测试都要模拟 SDK,运行真实 CometChat 需要网络与服务器;不要测试 UIKit 内部实现;跳过实时测试;断言视图 ID 与状态而非像素;E2E 在模拟器或设备上运行,不在 JUnit 中测试真实 CometChat 流程。