3.5 KiB
3.5 KiB
前后端测试分析报告
Date: 2026-03-04 Status: Completed
测试统计
后端测试
| 类型 | 数量 | 状态 |
|---|---|---|
| Unit Tests | ~100+ | 可运行 |
| Integration Tests | ~70+ | 可运行 |
| E2E Tests | 5 | 无法运行 (缺少 playwright 依赖) |
前端测试
| 类型 | 数量 | 状态 |
|---|---|---|
| Flutter Tests | 140 | ✅ 全部通过 |
问题发现
1. 后端 E2E 测试无法运行 (HIGH)
问题: 5 个 E2E 测试文件需要 playwright 模块,但依赖未安装。
影响文件:
tests/e2e/test_auth_flow.pytests/e2e/test_infra_health_e2e.pytests/e2e/test_logging_e2e.pytests/e2e/test_mobile_health_e2e.pytests/e2e/test_profile_flow.py
错误:
ModuleNotFoundError: No module named 'playwright'
建议:
- 安装 playwright:
uv add playwright && uv run playwright install - 或者移除这些无法运行的 E2E 测试文件
2. 测试文件命名冲突导致收集警告 (LOW)
问题: 存在多个同名 test_schemas.py 文件在不同目录,导致 pytest 收集时显示警告。
影响文件:
tests/unit/v1/schedule_items/test_schemas.pytests/unit/v1/profile/test_schemas.pytests/unit/v1/inbox_messages/test_schemas.pytests/unit/v1/friendships/test_schemas.py
状态: 测试实际可以正常运行,只是有警告提示。
建议: 可保持现状(这是合理的代码组织方式),或重命名为 test_*.py 以消除警告。
3. 遗留测试验证旧字段 (INFO)
文件: tests/unit/v1/profile/test_schemas.py
测试: test_profile_update_rejects_display_name_field
说明: 此测试验证旧的 display_name 字段被正确拒绝。字段已在之前的重构中删除。
状态: 有效 - 这是一个回归测试,确保旧字段不被使用。
未发现的问题
冗余测试
经过检查,未发现明显冗余的测试:
- 每个模块的测试覆盖不同的功能
- Unit tests、Integration tests、E2E tests 有清晰的职责划分
死代码
未发现测试文件中有未使用的:
- imports
- mock 类
- helper 函数
缺失测试
未发现对应已实现功能但缺少测试的情况。
测试覆盖模块
后端
| 模块 | Unit | Integration | E2E |
|---|---|---|---|
| Auth | ✅ | ✅ | ❌ |
| Users | - | ✅ | - |
| Profile | ✅ | - | ❌ |
| Friendships | ✅ | ✅ | - |
| Inbox Messages | ✅ | ✅ | - |
| Schedule Items | ✅ | ✅ | - |
| Logging | ✅ | ✅ | ✅ |
| Settings | ✅ | - | - |
前端
| 模块 | 测试数 |
|---|---|
| Auth | ~20 |
| Chat | ~70 |
| Home | ~15 |
| Calendar | ~5 |
| Core (API, Storage) | ~30 |
建议
- 立即: 解决 E2E 测试依赖问题或移除无法运行的测试文件
- 可选: 清理 test_schemas.py 重名警告(低优先级)
- 保持: 现有的测试结构良好,无需重大重构
附: 测试代码质量问题
测试类未完全实现 Protocol (LSP 警告)
文件: tests/unit/v1/auth/test_auth_service.py
问题: FakeGateway 和 LogoutAssertingGateway 类没有实现 AuthServiceGateway Protocol 的全部方法:
request_password_resetconfirm_password_reset
影响: LSP 类型检查器报告错误,但运行时不受影响(因为这些方法在测试中不会被调用)。
建议: 可选择补充缺失的方法实现,或使用 @pytest.mark.skip 标记不需要的协议方法。
报告生成时间: 2026-03-04