test: 添加核心模块单元测试 (config/upload/chunked_upload/asset_diagnosis) #122

Merged
xiaoxia merged 1 commits from test/unit-tests-core-modules into develop 2026-06-30 13:03:48 +08:00
Owner

概述

为后端核心模块添加单元测试,覆盖 config.py、upload.py、chunked_upload.py、asset_diagnosis.py 四个关键模块。

测试文件

文件 测试数 覆盖内容
tests/unit/test_config_oss.py 22 OSS 配置默认值、环境变量覆盖、字段名一致性、extra="ignore" 行为
tests/unit/test_upload_routes.py 9 上传路由 find_by_project 调用正确性、OSS 凭证校验、文件类型校验
tests/unit/test_chunked_upload_routes.py 8 分片上传初始化、项目/素材库校验、文件大小限制、常量校验
tests/unit/test_asset_diagnosis.py 7 资产诊断逻辑、路由层 find_by_project 调用正确性

总计:46 个测试用例,全部通过

技术要点

  • 使用 FastAPI dependency_overrides 进行依赖注入测试
  • Stub 实现采用 duck typing(不继承 Port ABC),因为实际适配器也是同步 duck-type
  • get_storage_serviceapp.core.storage 导入,而非 app.dependencies
  • 修复了路由 URL 路径(/projects/{id}/asset-diagnosis 而非 /assets/diagnosis/{id}
  • 修复了 AssetLibraryKind 枚举值(无 AUDIO,使用 VOICE 代替)

测试运行

python -m pytest tests/unit/test_config_oss.py tests/unit/test_upload_routes.py tests/unit/test_chunked_upload_routes.py tests/unit/test_asset_diagnosis.py -v
# 46 passed in 0.91s

Closes #55

## 概述 为后端核心模块添加单元测试,覆盖 config.py、upload.py、chunked_upload.py、asset_diagnosis.py 四个关键模块。 ## 测试文件 | 文件 | 测试数 | 覆盖内容 | |------|--------|----------| | `tests/unit/test_config_oss.py` | 22 | OSS 配置默认值、环境变量覆盖、字段名一致性、extra="ignore" 行为 | | `tests/unit/test_upload_routes.py` | 9 | 上传路由 find_by_project 调用正确性、OSS 凭证校验、文件类型校验 | | `tests/unit/test_chunked_upload_routes.py` | 8 | 分片上传初始化、项目/素材库校验、文件大小限制、常量校验 | | `tests/unit/test_asset_diagnosis.py` | 7 | 资产诊断逻辑、路由层 find_by_project 调用正确性 | **总计:46 个测试用例,全部通过** ## 技术要点 - 使用 FastAPI `dependency_overrides` 进行依赖注入测试 - Stub 实现采用 duck typing(不继承 Port ABC),因为实际适配器也是同步 duck-type - `get_storage_service` 从 `app.core.storage` 导入,而非 `app.dependencies` - 修复了路由 URL 路径(`/projects/{id}/asset-diagnosis` 而非 `/assets/diagnosis/{id}`) - 修复了 `AssetLibraryKind` 枚举值(无 AUDIO,使用 VOICE 代替) ## 测试运行 ```bash python -m pytest tests/unit/test_config_oss.py tests/unit/test_upload_routes.py tests/unit/test_chunked_upload_routes.py tests/unit/test_asset_diagnosis.py -v # 46 passed in 0.91s ``` Closes #55
xiaoxia added 1 commit 2026-06-30 12:57:21 +08:00
test: 添加核心模块单元测试 (config/upload/chunked_upload/asset_diagnosis)
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Lint (pull_request) Has been cancelled
c0c049b2e1
- test_config_oss.py: 22 个测试覆盖 OSS 配置默认值、环境变量覆盖、字段名一致性
- test_upload_routes.py: 9 个测试覆盖上传路由 find_by_project 调用正确性
- test_chunked_upload_routes.py: 8 个测试覆盖分片上传初始化、常量校验
- test_asset_diagnosis.py: 7 个测试覆盖资产诊断逻辑和路由层调用

全部 46 个测试通过。

Closes #55
Author
Owner

代码审计审查报告 — PR #122 通过

Head SHA: c0c049b2 | 4 文件 +1046/-4 | 46 tests

审查结论:通过

46 个测试用例全部有实际意义,非凑数。

逐文件审查

test_config_oss.py (22 tests)

  • 默认值测试(6):覆盖所有 OSS 字段,包括 PR#117/PR#119 修复的字段
  • 环境变量覆盖测试(6):每个字段独立验证
  • 字段名一致性测试(7):hasattr + property 别名,防御拼写错误回归
  • extra=ignore 测试(2)+ 别名兼容测试(1)
  • importlib 绕过 __init__.py 副作用的方式合理

test_upload_routes.py (9 tests)

  • Stub 设计优秀:list_by_project 故意抛 AssertionError,验证路由不调用旧方法
  • 覆盖正常路径、404、503、415 四种状态码
  • dependency_overrides mock 方式正确
  • 断言有效:检查状态码 + 响应体内容

test_chunked_upload_routes.py (8 tests)

  • 覆盖初始化正常路径、404、文件过大、方法名验证
  • 常量测试(3)虽然简单但能防止意外修改

test_asset_diagnosis.py (7 tests)

  • 3 个纯函数测试覆盖诊断逻辑(缺失视频/评分/低质量标记)
  • 4 个路由层测试验证 find_by_project 调用正确性

安全审查

  • 无硬编码凭证(JWT_SECRET_KEY 使用测试值)
  • 无真实 OSS 密钥泄露

P2 建议(不阻塞)

  • upload_asset(表单上传端点)缺少测试覆盖
  • hasattr 测试可以增强为类型检查

审查通过,可以合并。

## 代码审计审查报告 — PR #122 通过 **Head SHA:** `c0c049b2` | **4 文件 +1046/-4** | **46 tests** ### 审查结论:通过 46 个测试用例全部有实际意义,非凑数。 ### 逐文件审查 **test_config_oss.py (22 tests) ✅** - 默认值测试(6):覆盖所有 OSS 字段,包括 PR#117/PR#119 修复的字段 - 环境变量覆盖测试(6):每个字段独立验证 - 字段名一致性测试(7):hasattr + property 别名,防御拼写错误回归 - extra=ignore 测试(2)+ 别名兼容测试(1) - importlib 绕过 __init__.py 副作用的方式合理 **test_upload_routes.py (9 tests) ✅** - Stub 设计优秀:list_by_project 故意抛 AssertionError,验证路由不调用旧方法 - 覆盖正常路径、404、503、415 四种状态码 - dependency_overrides mock 方式正确 - 断言有效:检查状态码 + 响应体内容 **test_chunked_upload_routes.py (8 tests) ✅** - 覆盖初始化正常路径、404、文件过大、方法名验证 - 常量测试(3)虽然简单但能防止意外修改 **test_asset_diagnosis.py (7 tests) ✅** - 3 个纯函数测试覆盖诊断逻辑(缺失视频/评分/低质量标记) - 4 个路由层测试验证 find_by_project 调用正确性 ### 安全审查 - 无硬编码凭证(JWT_SECRET_KEY 使用测试值)✅ - 无真实 OSS 密钥泄露 ✅ ### P2 建议(不阻塞) - upload_asset(表单上传端点)缺少测试覆盖 - hasattr 测试可以增强为类型检查 **审查通过,可以合并。**
xiaoxia merged commit 56707a834c into develop 2026-06-30 13:03:48 +08:00
Sign in to join this conversation.