test: P3-1 第43波单元测试(ffmpeg_utils/ai_client/config_base) #825

Merged
xiaoxia merged 2 commits from test/unit-test-wave43 into develop 2026-07-24 16:45:44 +08:00
Owner

变更内容

  • 新增 ffmpeg_utils 模块测试 10 个(常量、run_ffmpeg 执行/异常/超时)
  • 新增 ai_client (DoubaoClient) 模块测试 13 个(初始化、is_available、chat_completion 成功/降级/重试/失败、单例)
  • 新增 config/base 配置基类测试 16 个(默认值校验、单例缓存、reload、多类隔离)
  • 合计 +39 个测试

测试结果

  • 本地全量:4516 passed, 8 skipped
## 变更内容 - 新增 ffmpeg_utils 模块测试 10 个(常量、run_ffmpeg 执行/异常/超时) - 新增 ai_client (DoubaoClient) 模块测试 13 个(初始化、is_available、chat_completion 成功/降级/重试/失败、单例) - 新增 config/base 配置基类测试 16 个(默认值校验、单例缓存、reload、多类隔离) - 合计 +39 个测试 ## 测试结果 - 本地全量:4516 passed, 8 skipped
xiaoxia added 2 commits 2026-07-24 12:49:32 +08:00
test: P3-1 第43波单元测试(ffmpeg_utils/ai_client/config_base)
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 49s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m21s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 2m12s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 39s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m30s
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 Web Image (pull_request) Successful in 59s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m3s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 32s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m35s
AI Code Review / AI Code Review (pull_request) Successful in 4m5s
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 / PR Build API Image (pull_request) Successful in 6m22s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m37s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 10m28s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m10s
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 24s
6b75e7633d
Collaborator

代码审查结果 - PR #825

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

  1. tests/unit/test_ffmpeg_utils.py 第81行:测试逻辑无效,未覆盖被测代码。

    • 说明test_run_ffmpeg_timeout_expired 函数仅检查了 subprocess 模块是否有 TimeoutExpired 属性,这测试的是 Python 标准库而非项目代码中的 run_ffmpeg 函数。该测试无法验证 run_ffmpeg 是否正确处理超时参数或捕获超时异常。
    • 后果:产生虚假的代码覆盖率,无法发现超时处理逻辑中的错误。
    • 建议:移除此无效测试,或者通过 mock subprocess.run 让其抛出 TimeoutExpired 异常,以验证 run_ffmpeg 的异常处理逻辑。
  2. tests/unit/test_config_base.py 第59行:存在跨平台兼容性问题。

    • 说明_make_settings 方法中使用 _env_file='/dev/null'/dev/null 是 Unix/Linux 系统特有的设备文件,在 Windows 系统上不存在。
    • 后果:该测试在 Windows 环境下运行时会因文件不存在而抛出 FileNotFoundError(取决于 pydantic-settings 的具体实现),导致测试失败。
    • 建议:使用 _env_file=None 来显式跳过读取文件,或者使用 tempfile 创建跨平台的临时空文件。

💡 建议(2个可选)

  1. tests/unit/test_ffmpeg_utils.py:单元测试不应依赖外部二进制文件。

    • 说明:该测试文件中的多个测试直接调用系统中的 ffmpegffprobe 命令。如果运行环境(如 CI 容器)未安装这些软件,测试将全部失败。这更像是集成测试而非单元测试。
    • 建议:考虑使用 unittest.mock.patch 替换 subprocess.run,模拟命令执行的成功、失败及输出,以实现真正的单元隔离。
  2. tests/unit/test_ai_client.py 第155行:测试注释耦合了具体实现细节。

    • 说明test_empty_choices_returns_none 的注释写道 # 会因 IndexError 进入异常分支,最终返回 None。这使得测试用例强依赖于代码通过捕获 IndexError 来实现逻辑。如果未来代码改为显式检查列表长度(if not choices:),测试依然有效,但注释会变得误导。
    • 建议:修改注释为关注行为而非实现,例如 # 验证 choices 为空时返回 None

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


🤖 由 AI 代码审查机器人自动生成 | 2026-07-24 05:01:44 | 模型:

## 代码审查结果 - PR #825 ### ⚠️ 问题(2个需要修改) 1. **tests/unit/test_ffmpeg_utils.py 第81行**:测试逻辑无效,未覆盖被测代码。 - **说明**:`test_run_ffmpeg_timeout_expired` 函数仅检查了 `subprocess` 模块是否有 `TimeoutExpired` 属性,这测试的是 Python 标准库而非项目代码中的 `run_ffmpeg` 函数。该测试无法验证 `run_ffmpeg` 是否正确处理超时参数或捕获超时异常。 - **后果**:产生虚假的代码覆盖率,无法发现超时处理逻辑中的错误。 - **建议**:移除此无效测试,或者通过 mock `subprocess.run` 让其抛出 `TimeoutExpired` 异常,以验证 `run_ffmpeg` 的异常处理逻辑。 2. **tests/unit/test_config_base.py 第59行**:存在跨平台兼容性问题。 - **说明**:`_make_settings` 方法中使用 `_env_file='/dev/null'`。`/dev/null` 是 Unix/Linux 系统特有的设备文件,在 Windows 系统上不存在。 - **后果**:该测试在 Windows 环境下运行时会因文件不存在而抛出 `FileNotFoundError`(取决于 `pydantic-settings` 的具体实现),导致测试失败。 - **建议**:使用 `_env_file=None` 来显式跳过读取文件,或者使用 `tempfile` 创建跨平台的临时空文件。 ### 💡 建议(2个可选) 1. **tests/unit/test_ffmpeg_utils.py**:单元测试不应依赖外部二进制文件。 - **说明**:该测试文件中的多个测试直接调用系统中的 `ffmpeg` 和 `ffprobe` 命令。如果运行环境(如 CI 容器)未安装这些软件,测试将全部失败。这更像是集成测试而非单元测试。 - **建议**:考虑使用 `unittest.mock.patch` 替换 `subprocess.run`,模拟命令执行的成功、失败及输出,以实现真正的单元隔离。 2. **tests/unit/test_ai_client.py 第155行**:测试注释耦合了具体实现细节。 - **说明**:`test_empty_choices_returns_none` 的注释写道 `# 会因 IndexError 进入异常分支,最终返回 None`。这使得测试用例强依赖于代码通过捕获 `IndexError` 来实现逻辑。如果未来代码改为显式检查列表长度(`if not choices:`),测试依然有效,但注释会变得误导。 - **建议**:修改注释为关注行为而非实现,例如 `# 验证 choices 为空时返回 None`。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能良好 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-24 05:01:44 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia merged commit 318f968c0e into develop 2026-07-24 16:45:44 +08:00
xiaoxia deleted branch test/unit-test-wave43 2026-07-24 16:45:44 +08:00

🗑️ 预览环境已清理

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

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

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