name: 创建单元测试 description: 按照项目架构和指南(Robolectric、命名规范、位置)创建并运行单元测试。
创建单元测试
此技能指导创建单元测试,以确保一致性和正确性。
工作流程
-
分析与规划:
- 目标: 理解需要测试的内容。
- 操作: 检查源代码。
- 操作: 识别“快乐路径”用例(核心功能)。
- 操作: 根据可能性识别“错误用例”和“边界用例”。
- 操作: 不要建议实现细节,除非被要求;专注于行为。
-
设置测试文件:
- 命名:
[原始类名]Test.kt。 - 位置:
[模块]/src/test/java/[包路径]/。 - 运行器: 如果测试Android组件,必须使用Robolectric。
- 模拟: 优先创建 Fakes,而不是Mocks或补丁。仅在Fakes过于复杂时使用Mocks。
- 命名:
-
实现测试:
- 编写清晰、描述性强的测试方法。
- 遵循“准备-执行-断言”模式。
- 确保所有资源(字符串、主题)都通过Robolectric正确模拟或提供。
-
运行测试:
- 命令:
./gradlew :[模块]:testDebugUnitTest - 示例:
./gradlew :database:testDebugUnitTest - 提示: 在提交任何代码前,运行
./gradlew testDebugUnitTest以确保所有测试通过。
- 命令:
-
处理失败:
- 目标: 诊断并修复问题。
- 操作: 如果测试失败,定位完整的错误报告。
- 路径:
[模块]/build/test-results/testDebugUnitTest/TEST-[包名.测试类名].xml。 - 示例:
app/build/test-results/testDebugUnitTest/TEST-com.anysoftkeyboard.janus.app.MainActivityTest.xml。
指南
- 一致性: 始终将测试放在
test源集中,而不是androidTest中(除非专门编写仪器化测试,这对于此技能来说很少见)。 - 可靠性: 避免不稳定的测试。确保确定性行为。