xworkmate-app/docs/testing/flutter-go-layered-testing-template.md

102 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Flutter + Go 分层测试体系实施模板(业务代码零侵入)
> 目标:在不修改 `lib/` 业务实现的前提下,补齐可落地、可持续演进的测试分层与 CI 模板。
## 1. 推荐目录分层
```text
project_root/
├── test/
│ ├── widget/
│ └── golden/
├── integration_test/
├── patrol_test/
├── go/go_core/
│ └── internal/**/*_test.go
└── .github/workflows/
├── pr-tests.yml
└── release-e2e.yml
```
- `test/widget/`:组件行为与交互局部验证(快)。
- `test/golden/`:视觉基线与 UI 回归(中速)。
- `integration_test/`:关键业务流程主链路(慢)。
- `patrol_test/`:真机/模拟器系统级能力(最慢、最高真实性)。
- `go/go_core/internal/**/*_test.go`:后端 handler/service/repository 单测(快)。
## 2. 本仓库落地约束
1. **不改业务代码**仅新增测试脚手架、测试文档、CI 编排。
2. **先快后慢**PR 默认只跑 `widget + go unit (+ 可选 golden)`
3. **重流程放夜间/发布前**`integration + patrol` 放 `release-e2e.yml`
4. **失败可定位**:每一层独立 Job避免“大锅饭”日志。
## 3. 本地执行命令模板
```bash
# Flutter 依赖
flutter pub get
# 快速反馈层
flutter analyze
flutter test test/widgets test/features test/runtime
# Golden有目录时
flutter test test/golden
# Integration
flutter test integration_test
# Patrol安装后
patrol test patrol_test
# Go 单元测试
cd go/go_core && go test ./...
```
## 4. Golden 约定(模板)
- 黄金图建议集中在 `test/golden/goldens/`
- 统一尺寸、字体、主题,降低跨平台漂移。
- 更新基线命令(示例):
```bash
flutter test test/golden --update-goldens
```
## 5. Patrol 约定(模板)
- `patrol_test/` 覆盖系统权限弹窗、WebView、文件选择、原生交互。
- PR 不强制 Patrol避免高成本阻塞。
- 发布前执行 `release-e2e.yml` 中 Patrol Job。
## 6. GitHub Actions 分层执行建议
### PR 层(`pr-tests.yml`
- `analyze``flutter analyze`
- `flutter-unit-widget``flutter test`(核心 test 目录)
- `go-unit``go test ./...`
- `flutter-golden`(可选):仅当 `test/golden/` 存在并有测试文件时执行
### 发布前层(`release-e2e.yml`
- `flutter-integration`:关键流程回归
- `patrol`:真机/模拟器系统级流程
- 可选接入人工审批与制品归档
## 7. 增量演进路线
1. 先稳定 PR 快速层(分析 + Flutter 单测 + Go 单测)。
2. 再补 golden 基线(页面级视觉回归)。
3. 然后扩展 integration_test 核心路径。
4. 最后补 Patrol 的系统级场景,绑定发布前门禁。
## 8. 验收清单(模板)
- [ ] PR 在 10~15 分钟内完成快速反馈。
- [ ] Go 与 Flutter 测试失败可单层定位。
- [ ] Golden 回归有固定目录与更新机制。
- [ ] integration_test 覆盖关键业务主路径。
- [ ] Patrol 覆盖至少 1 条权限或系统弹窗关键流。