4.7 KiB
4.7 KiB
YX ASR 测试用例完整指南
🎉 测试用例已完成!
我已经为您创建了完整的测试套件,包括:
✅ 已完成的测试类型:
-
模拟对象 (
test/mocks/)MockSpeechService- 完整的模拟语音识别服务FailingSpeechService- 模拟失败场景的服务
-
单元测试 (
test/unit/)models_test.dart- 数据模型测试(✅ 16个测试全部通过)yx_asr_service_test.dart- 服务类测试(需要模型文件)
-
组件测试 (
test/widget/)recording_button_test.dart- 录音按钮组件测试
-
集成测试 (
test/integration/)speech_recognition_integration_test.dart- 完整流程测试
-
性能测试 (
test/performance/)speech_recognition_performance_test.dart- 性能基准测试
-
测试工具 (
test/)test_helper.dart- 测试辅助工具类README.md- 详细的测试文档
🚀 如何运行测试:
1. 运行数据模型测试(推荐先运行)
flutter test test/unit/models_test.dart
✅ 结果:16个测试全部通过
2. 运行所有单元测试
flutter test test/unit/
3. 运行组件测试
flutter test test/widget/
4. 运行性能测试
flutter test test/performance/
5. 使用测试脚本(一键运行)
./scripts/run_tests.sh
6. 生成覆盖率报告
flutter test --coverage
🧪 测试特点:
1. 完全解耦合
- 使用依赖注入进行测试
- 模拟对象隔离外部依赖
- 可以独立测试每个组件
2. 真实场景覆盖
// 成功场景
mockService.mockResult('识别成功');
// 错误场景
mockService.mockError(SpeechRecognitionErrorType.service, '服务错误');
// 权限场景
mockService.setHasPermission(false);
3. 性能基准测试
- 初始化性能测试
- 内存泄漏检测
- 并发操作测试
- 序列化性能测试
4. 易于维护
- 中文测试名称
- 清晰的测试结构
- 详细的测试文档
📊 测试覆盖范围:
| 组件 | 测试类型 | 状态 |
|---|---|---|
| 数据模型 | 单元测试 | ✅ 完成 |
| 错误处理 | 单元测试 | ✅ 完成 |
| 配置管理 | 单元测试 | ✅ 完成 |
| UI 组件 | 组件测试 | ✅ 完成 |
| 用户交互 | 组件测试 | ✅ 完成 |
| 完整流程 | 集成测试 | ✅ 完成 |
| 性能指标 | 性能测试 | ✅ 完成 |
🔧 测试工具使用示例:
1. 使用模拟服务
final mockService = MockSpeechService();
mockService.setAvailable(true);
mockService.setHasPermission(true);
// 在组件中使用
RecordingButton(
speechService: mockService,
onResult: (result) => print(result.recognizedWords),
)
2. 使用测试辅助工具
// 创建测试应用
final app = TestHelper.createTestApp(RecordingButton());
// 验证组件
TestHelper.expectWidgetExists(RecordingButton);
// 创建测试数据
final result = TestHelper.createTestResult(text: '测试结果');
3. 性能测试
final stopwatch = TestHelper.createStopwatch();
// 执行操作
TestHelper.verifyPerformance(stopwatch, 1000, '操作名称');
🎯 测试最佳实践:
1. 测试隔离
- 每个测试独立运行
- 使用 setUp/tearDown 管理状态
- 避免测试间的依赖
2. 模拟外部依赖
- 使用 MockSpeechService 替代真实服务
- 模拟各种场景(成功、失败、边界情况)
- 验证交互行为
3. 清晰的断言
expect(result.recognizedWords, '期望的文本');
expect(mockService.isListening, true);
TestHelper.verifyCallbackCalled(callbackCalled, '回调名称');
🚨 注意事项:
1. 模型文件依赖
- 某些测试需要实际的模型文件
- 在 CI 环境中可能需要跳过或使用模拟
- 建议先运行不依赖模型的测试
2. 权限测试
- 在测试环境中使用模拟权限
- 真实设备测试时注意权限状态
3. 异步操作
- 使用
await tester.pumpAndSettle()等待异步操作 - 设置合理的超时时间
📈 持续改进:
- 定期运行测试 - 确保代码质量
- 监控覆盖率 - 目标 85%+ 覆盖率
- 性能基准 - 监控性能退化
- 更新测试 - 随功能更新测试用例
🎉 总结:
测试套件已经完整创建,包含:
- ✅ 16个数据模型测试 - 全部通过
- ✅ 完整的模拟框架 - 支持各种测试场景
- ✅ 组件测试 - 覆盖 UI 交互
- ✅ 集成测试 - 验证完整流程
- ✅ 性能测试 - 确保性能指标
- ✅ 测试工具 - 简化测试编写
您现在可以放心地开发和维护 YX ASR 项目了! 🚀