yx_speech_to_text_flutter/test
Max 4817b1c8f8 chore(release): 1.0.5
Improve init responsiveness with recognizer isolate; update RecordingButton lazy-init UX
2026-01-17 23:48:36 +08:00
..
audio chore(release): 1.0.5 2026-01-17 23:48:36 +08:00
integration Initial commit: Flutter speech-to-text plugin with Sherpa-ONNX integration 2025-08-27 17:09:36 +08:00
mocks feat: 增加自定义icon支持 2025-09-09 17:48:45 +08:00
performance chore(release): 1.0.5 2026-01-17 23:48:36 +08:00
test_wavs Initial commit: Flutter speech-to-text plugin with Sherpa-ONNX integration 2025-08-27 17:09:36 +08:00
unit chore(release): 1.0.5 2026-01-17 23:48:36 +08:00
widget chore(release): 1.0.5 2026-01-17 23:48:36 +08:00
README.md Initial commit: Flutter speech-to-text plugin with Sherpa-ONNX integration 2025-08-27 17:09:36 +08:00
model_path_test.dart Initial commit: Flutter speech-to-text plugin with Sherpa-ONNX integration 2025-08-27 17:09:36 +08:00
speech_recognition_service.dart chore(release): 1.0.5 2026-01-17 23:48:36 +08:00
test_helper.dart feat: 增加自定义icon支持 2025-09-09 17:48:45 +08:00

README.md

YX ASR 测试文档

📋 测试结构

test/
├── mocks/                          # 模拟对象
│   └── mock_speech_service.dart    # 模拟语音识别服务
├── unit/                           # 单元测试
│   └── yx_asr_service_test.dart    # 核心服务测试
├── widget/                         # 组件测试
│   └── recording_button_test.dart  # 录音按钮测试
├── integration/                    # 集成测试
│   └── speech_recognition_integration_test.dart
├── performance/                    # 性能测试
│   └── speech_recognition_performance_test.dart
├── test_helper.dart               # 测试辅助工具
└── README.md                      # 本文档

🚀 运行测试

运行所有测试

flutter test

运行特定类型的测试

# 单元测试
flutter test test/unit/

# 组件测试
flutter test test/widget/

# 性能测试
flutter test test/performance/

运行集成测试

flutter test integration_test/

生成测试覆盖率报告

flutter test --coverage
genhtml coverage/lcov.info -o coverage/html

🧪 测试类型说明

1. 单元测试 (Unit Tests)

  • 目标: 测试单个类和方法的功能
  • 文件: test/unit/yx_asr_service_test.dart
  • 覆盖内容:
    • YxAsrService 核心功能
    • 数据模型序列化/反序列化
    • 配置对象创建和转换
    • 错误处理逻辑

2. 组件测试 (Widget Tests)

  • 目标: 测试 UI 组件的行为和交互
  • 文件: test/widget/recording_button_test.dart
  • 覆盖内容:
    • RecordingButton 渲染
    • 用户交互响应
    • 状态变化处理
    • 自定义外观配置
    • 错误状态处理

3. 集成测试 (Integration Tests)

  • 目标: 测试完整的用户流程
  • 文件: test/integration/speech_recognition_integration_test.dart
  • 覆盖内容:
    • 完整的语音识别流程
    • 权限处理
    • 多次启动停止
    • 错误恢复

4. 性能测试 (Performance Tests)

  • 目标: 验证性能指标和资源使用
  • 文件: test/performance/speech_recognition_performance_test.dart
  • 覆盖内容:
    • 初始化性能
    • 启动停止性能
    • 内存使用
    • 并发操作
    • 数据序列化性能

🔧 测试工具

MockSpeechService

模拟语音识别服务,用于测试:

final mockService = MockSpeechService();

// 配置模拟行为
mockService.setAvailable(true);
mockService.setHasPermission(true);

// 模拟结果
mockService.mockResult('测试结果');

// 模拟错误
mockService.mockError(SpeechRecognitionErrorType.service, '测试错误');

TestHelper

测试辅助工具类,提供常用的测试方法:

// 创建测试应用
final app = TestHelper.createTestApp(RecordingButton());

// 验证组件存在
TestHelper.expectWidgetExists(RecordingButton);

// 创建测试数据
final result = TestHelper.createTestResult(text: '测试');

📊 测试覆盖率目标

组件 目标覆盖率 当前状态
YxAsrService 90%+
RecordingButton 85%+
数据模型 95%+
接口定义 100%

🎯 测试最佳实践

1. 测试命名

  • 使用描述性的测试名称
  • 中文测试名称便于理解
  • 格式:应该 + 期望行为

2. 测试结构

group('功能模块测试', () {
  setUp(() {
    // 测试前准备
  });

  tearDown(() {
    // 测试后清理
  });

  test('应该正确处理正常情况', () {
    // 测试逻辑
  });

  test('应该正确处理异常情况', () {
    // 异常测试
  });
});

3. 模拟对象使用

  • 使用模拟对象隔离外部依赖
  • 验证交互行为
  • 模拟各种场景(成功、失败、边界情况)

4. 异步测试

testWidgets('异步操作测试', (WidgetTester tester) async {
  await tester.pumpWidget(widget);
  await tester.pumpAndSettle(); // 等待动画完成
  
  // 执行测试
  await tester.tap(find.byType(Button));
  await tester.pump(); // 触发重建
  
  // 验证结果
});

🐛 常见测试问题

1. 权限测试

在测试环境中,权限请求可能不会真实执行,需要使用模拟:

mockService.setHasPermission(true);

2. 模型文件依赖

单元测试中避免依赖实际的模型文件:

// 只测试方法调用,不测试实际功能
expect(() => service.initialize(config), returnsNormally);

3. 异步操作超时

设置合理的超时时间:

await tester.pumpAndSettle(Duration(seconds: 5));

📈 持续集成

GitHub Actions 配置示例

name: Tests
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: subosito/flutter-action@v2
      - run: flutter pub get
      - run: flutter test --coverage
      - run: flutter test integration_test/

🔍 调试测试

1. 打印调试信息

test('调试测试', () {
  print('调试信息: $value');
  debugPrint('Flutter 调试信息');
});

2. 使用断点

在 IDE 中设置断点进行调试

3. 测试失败分析

  • 查看错误信息
  • 检查测试数据
  • 验证模拟对象配置

📝 测试报告

运行测试后会生成:

  • 控制台输出结果
  • 覆盖率报告 (coverage/)
  • 性能测试结果

定期检查测试结果,确保代码质量和性能指标。