fix(test): 修复MagicMock枚举导致的3个单元测试失败 #642

Merged
xiaoxia merged 1 commits from ci/fix-unit-test-magicmock-enum into develop 2026-07-20 17:41:10 +08:00
Owner

问题

Unit Tests 有3个用例失败:

  • TestP1Validations.test_validate_template_exists_success
  • TestTemplatePlanConfigLoading.test_load_template_config_assembles_three_fields
  • TestTemplatePlanConfigLoading.test_load_template_config_only_bgm

根因

测试 mock SessionLocal 时未区分新/旧模板系统的 model 查询。SQLAlchemyEditTemplateRepository.get() 也会走到 mock session 并返回 MagicMock 对象,导致 _model_to_entityEditTemplateStatus(model.status) 枚举转换失败(MagicMock 不是有效的枚举值)。

这些测试本意是测旧模板系统(TemplateModel)的 fallback 路径,但新模板系统先被调用就崩了。

修复

mock session.query() 增加 side_effect,根据 model 类型返回不同结果:

  • EditTemplateModel 查询返回 None(强制走旧模板系统 fallback)
  • TemplateModel 查询返回 mock template(测试目标路径)

同时修复了 test_load_template_config_not_found_returns_empty 中的同样问题。

## 问题 Unit Tests 有3个用例失败: - `TestP1Validations.test_validate_template_exists_success` - `TestTemplatePlanConfigLoading.test_load_template_config_assembles_three_fields` - `TestTemplatePlanConfigLoading.test_load_template_config_only_bgm` ## 根因 测试 mock `SessionLocal` 时未区分新/旧模板系统的 model 查询。`SQLAlchemyEditTemplateRepository.get()` 也会走到 mock session 并返回 MagicMock 对象,导致 `_model_to_entity` 中 `EditTemplateStatus(model.status)` 枚举转换失败(MagicMock 不是有效的枚举值)。 这些测试本意是测旧模板系统(TemplateModel)的 fallback 路径,但新模板系统先被调用就崩了。 ## 修复 mock session.query() 增加 side_effect,根据 model 类型返回不同结果: - EditTemplateModel 查询返回 None(强制走旧模板系统 fallback) - TemplateModel 查询返回 mock template(测试目标路径) 同时修复了 `test_load_template_config_not_found_returns_empty` 中的同样问题。
Collaborator

代码审查结果 - PR #642

⚠️ 问题(0个需要修改)

💡 建议(1个可选)

  1. tests/unit/test_oneclick_gen_p0_fixes.py:建议优化 Mock 对象的匹配逻辑。当前使用字符串匹配(if "EditTemplate" in name)来区分不同的 Model,这种方式虽然简洁,但依赖于类名字符串,如果后续类名重构或引入包含相同子串的新类,可能导致测试逻辑错误。如果测试文件中已导入相关 Model 类,建议使用 isinstance 或直接对象比较(如 if model is EditTemplateModel:)以提高健壮性。

格式检查通过 | 逻辑审查通过 | 性能良好


🤖 由 AI 代码审查机器人自动生成 | 2026-07-20 14:15:38 | 模型:

## 代码审查结果 - PR #642 ### ⚠️ 问题(0个需要修改) 无 ### 💡 建议(1个可选) 1. **tests/unit/test_oneclick_gen_p0_fixes.py**:建议优化 Mock 对象的匹配逻辑。当前使用字符串匹配(`if "EditTemplate" in name`)来区分不同的 Model,这种方式虽然简洁,但依赖于类名字符串,如果后续类名重构或引入包含相同子串的新类,可能导致测试逻辑错误。如果测试文件中已导入相关 Model 类,建议使用 `isinstance` 或直接对象比较(如 `if model is EditTemplateModel:`)以提高健壮性。 --- ✅ 格式检查通过 | ✅ 逻辑审查通过 | ✅ 性能良好 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-20 14:15:38 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia added 1 commit 2026-07-20 14:24:54 +08:00
fix(test): 修复MagicMock枚举导致的3个单元测试失败
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 18s
AI Code Review / AI Code Review (pull_request) Failing after 32s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 4m18s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 7m30s
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 6s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Failing after 57s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 3m10s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 3m17s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m44s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 23s
1a6672dc6e
根因:测试mock SessionLocal时未区分新/旧模板系统的model查询,
SQLAlchemyEditTemplateRepository.get()也会走到mock session并返回MagicMock,
导致_model_to_entity中EditTemplateStatus(model.status)枚举转换失败。

修复:mock session.query()增加side_effect,根据model类型返回不同结果:
- EditTemplateModel查询返回None(强制走旧模板系统fallback)
- TemplateModel查询返回mock template(测试目标路径)

影响测试:
- TestP1Validations.test_validate_template_exists_success
- TestTemplatePlanConfigLoading.test_load_template_config_assembles_three_fields
- TestTemplatePlanConfigLoading.test_load_template_config_only_bgm
xiaoxia force-pushed ci/fix-unit-test-magicmock-enum from 8a468157ee to 1a6672dc6e 2026-07-20 14:24:54 +08:00 Compare
xiaoxia merged commit 87f506e18a into develop 2026-07-20 17:41:10 +08:00
xiaoxia deleted branch ci/fix-unit-test-magicmock-enum 2026-07-20 17:41:10 +08:00

🗑️ 预览环境已清理

PR #642 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #642 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.