test(unit): 第62波 - module_registry + asr_service_factory + sms_service (+58) #856

Merged
xiaoxia merged 1 commits from test/wave62-module-registry-asr-factory-sms into develop 2026-07-25 08:12:53 +08:00
Owner

第62波单元测试补充

覆盖3个模块,+58个用例全部通过:

模块 文件 用例数 说明
模块注册中心 test_module_registry.py 38 Module/QuotaRule/ModuleCapability数据类 + 注册注销查询依赖检查 + 能力发现配额规则 + 全局单例
ASR服务工厂 test_asr_service_factory.py 8 provider切换 + 单例缓存 + 未知provider降级
短信服务 test_sms_service.py 12 NoopSmsService + AliyunSmsService初始化 + 工厂函数

本地验证

pytest tests/unit/test_module_registry.py tests/unit/test_asr_service_factory.py tests/unit/test_sms_service.py -v
58 passed in 2.65s
### 第62波单元测试补充 覆盖3个模块,+58个用例全部通过: | 模块 | 文件 | 用例数 | 说明 | |------|------|--------|------| | 模块注册中心 | `test_module_registry.py` | 38 | Module/QuotaRule/ModuleCapability数据类 + 注册注销查询依赖检查 + 能力发现配额规则 + 全局单例 | | ASR服务工厂 | `test_asr_service_factory.py` | 8 | provider切换 + 单例缓存 + 未知provider降级 | | 短信服务 | `test_sms_service.py` | 12 | NoopSmsService + AliyunSmsService初始化 + 工厂函数 | ### 本地验证 ``` pytest tests/unit/test_module_registry.py tests/unit/test_asr_service_factory.py tests/unit/test_sms_service.py -v 58 passed in 2.65s ```
xiaoxia added 1 commit 2026-07-25 00:04:50 +08:00
test(unit): 第62波 - module_registry + asr_service_factory + sms_service
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 28s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 57s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 37s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m29s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m30s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 34s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m59s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 2m28s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m34s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 4m11s
AI Code Review / AI Code Review (pull_request) Successful in 4m24s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 6m12s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 3m2s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m41s
CI/CD Pipeline / Deploy Production (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 / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 45s
47fee9412e
- test_module_registry: 模块注册中心,38个用例
  - Module/ModuleCapability/QuotaRule 数据类
  - 注册/注销/查询/依赖检查
  - 能力发现与配额规则
  - 全局单例清理

- test_asr_service_factory: ASR服务工厂,8个用例
  - 默认/空值/空白 provider 返回 None
  - mock provider 返回 MockASRService
  - 未知 provider 降级返回 None
  - 单例缓存 + reset 缓存

- test_sms_service: 短信服务,12个用例
  - NoopSmsService 空实现
  - AliyunSmsService 初始化(env + 显式参数)
  - 验证码委托到模板短信
  - get_sms_service 工厂(noop/aliyun/未知/大小写)

+58
Collaborator

代码审查结果 - PR #856

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

💡 建议(2个可选)

  1. tests/unit/test_module_registry.py 第236行:避免直接访问私有成员 _modules

    • 说明:在 test_has_capability_inactive_module 测试中,代码直接通过 registry._modules["ai_mod"] = m 绕过 register 方法注入模块。虽然这能强制设置特定状态,但破坏了封装性,如果 ModuleRegistry 内部实现改变(如改用属性封装、slots或加锁),测试将失败。
    • 建议:使用公开 API 先注册再禁用。例如:
      m = Module(name="ai_mod", capabilities=[ModuleCapability(name="generate_voice")])
      registry.register(m)
      m.disable()
      assert registry.has_capability("generate_voice") is False
      
  2. tests/unit/test_asr_service_factory.py 第35行:测试中存在冗余操作

    • 说明test_default_no_provider_returns_none 测试函数内部手动调用了 reset_asr_service_cache()。由于 clean_env fixture(autouse=True)已经在每个测试用例执行前调用了该方法,测试内的调用是冗余的。
    • 建议:删除测试函数内的 reset_asr_service_cache() 调用,依赖 fixture 即可,保持代码简洁。

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


🤖 由 AI 代码审查机器人自动生成 | 2026-07-24 16:10:17 | 模型:

## 代码审查结果 - PR #856 ### ⚠️ 问题(0个需要修改) 无 ### 💡 建议(2个可选) 1. **tests/unit/test_module_registry.py 第236行**:避免直接访问私有成员 `_modules` - **说明**:在 `test_has_capability_inactive_module` 测试中,代码直接通过 `registry._modules["ai_mod"] = m` 绕过 `register` 方法注入模块。虽然这能强制设置特定状态,但破坏了封装性,如果 `ModuleRegistry` 内部实现改变(如改用属性封装、slots或加锁),测试将失败。 - **建议**:使用公开 API 先注册再禁用。例如: ```python m = Module(name="ai_mod", capabilities=[ModuleCapability(name="generate_voice")]) registry.register(m) m.disable() assert registry.has_capability("generate_voice") is False ``` 2. **tests/unit/test_asr_service_factory.py 第35行**:测试中存在冗余操作 - **说明**:`test_default_no_provider_returns_none` 测试函数内部手动调用了 `reset_asr_service_cache()`。由于 `clean_env` fixture(autouse=True)已经在每个测试用例执行前调用了该方法,测试内的调用是冗余的。 - **建议**:删除测试函数内的 `reset_asr_service_cache()` 调用,依赖 fixture 即可,保持代码简洁。 --- ✅ 格式检查通过 | ✅ 逻辑审查通过 | ✅ 性能良好 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-24 16:10:17 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia merged commit c90b4819c0 into develop 2026-07-25 08:12:53 +08:00
xiaoxia deleted branch test/wave62-module-registry-asr-factory-sms 2026-07-25 08:12:53 +08:00

🗑️ 预览环境已清理

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

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

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