test(wave123): job领域模型单测 + 69测试 #1026

Closed
xiaoxia wants to merge 1 commits from test/wave123-job-unit into develop
Owner

变更内容

  • Job 领域模型全覆盖单测:69 个测试用例
  • 覆盖:枚举、create 参数校验、状态机转换、便捷方法、进度更新、重试逻辑、序列化

验证

  • 本地全绿:69 passed
  • 无回归
## 变更内容 - Job 领域模型全覆盖单测:69 个测试用例 - 覆盖:枚举、create 参数校验、状态机转换、便捷方法、进度更新、重试逻辑、序列化 ## 验证 - 本地全绿:69 passed - 无回归
xiaoxia force-pushed test/wave123-job-unit from c23c34e666 to 65be1e8645 2026-07-27 15:28:38 +08:00 Compare

🚀 预览环境已部署

项目 详情
PR号 #1026
预览链接 https://pr-1026.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1026 | | 预览链接 | [https://pr-1026.preview.xiaoxiajianji.com](https://pr-1026.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia added 1 commit 2026-07-27 18:18:44 +08:00
test(wave123): job领域模型单测 +69
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 7s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 1m20s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 57s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 35s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m1s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m37s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m14s
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 API Image (pull_request) Successful in 3m19s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m3s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 37s
AI Code Review / AI Code Review (pull_request) Successful in 4m14s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 45m51s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 0s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Failing after 1s
CI/CD Pipeline / CI Gate (pull_request) Failing after 0s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Failing after 1s
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
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 39s
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 / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
7580c96f90
覆盖状态机流转、重试逻辑、序列化、领域方法等
xiaoxia force-pushed test/wave123-job-unit from 65be1e8645 to 7580c96f90 2026-07-27 18:18:44 +08:00 Compare
Collaborator

代码审查结果 - PR #1026

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

  1. tests/unit/test_job.py 第239行 & 332行:使用 time.sleep 验证时间更新逻辑

    • 问题描述:测试中依赖 time.sleep(0.001) 来确保 updated_at 时间戳变化。这会导致测试执行变慢(性能问题),且在系统负载高或时钟精度低的情况下可能导致测试不稳定(Flaky Test)。
    • 修改建议:应使用 unittest.mockfreezegun 等 Mock 工具来模拟时间流逝,而不是真实等待。
  2. tests/unit/test_job.py 第239行 & 332行:在函数内部导入模块

    • 问题描述:在方法 test_transition_updates_updated_attest_progress_updates_updated_at 内部执行 import time。这违反了 PEP 8 规范(导入通常应放在文件顶部),虽然不影响功能,但降低了代码可读性并增加了不必要的运行时开销。
    • 修改建议:将 import time 移至文件顶部。

💡 建议(1个可选)

  1. tests/unit/test_job.py 第121行:直接修改内部属性进行测试
    • 建议描述:在 test_is_retryable_failed_at_limit 中,通过直接赋值 job.retry_count = 3 来构造边界条件。虽然 Python 允许这样做,但这种“上帝模式”绕过了领域模型的业务逻辑(如重试计数器是否应该由外部直接修改)。如果后续模型改为私有属性或封装修改方法,测试将失效。
    • 优化建议:建议通过模拟业务流程(例如连续失败并重试直到达到上限)来达到该状态,以更真实地验证业务逻辑。

格式检查通过 | 逻辑审查需修改 | ⚠️ 建议关注性能


🤖 由 AI 代码审查机器人自动生成 | 2026-07-27 11:07:28 | 模型:

## 代码审查结果 - PR #1026 ### ⚠️ 问题(2个需要修改) 1. **tests/unit/test_job.py 第239行 & 332行**:使用 `time.sleep` 验证时间更新逻辑 - **问题描述**:测试中依赖 `time.sleep(0.001)` 来确保 `updated_at` 时间戳变化。这会导致测试执行变慢(性能问题),且在系统负载高或时钟精度低的情况下可能导致测试不稳定(Flaky Test)。 - **修改建议**:应使用 `unittest.mock` 或 `freezegun` 等 Mock 工具来模拟时间流逝,而不是真实等待。 2. **tests/unit/test_job.py 第239行 & 332行**:在函数内部导入模块 - **问题描述**:在方法 `test_transition_updates_updated_at` 和 `test_progress_updates_updated_at` 内部执行 `import time`。这违反了 PEP 8 规范(导入通常应放在文件顶部),虽然不影响功能,但降低了代码可读性并增加了不必要的运行时开销。 - **修改建议**:将 `import time` 移至文件顶部。 ### 💡 建议(1个可选) 1. **tests/unit/test_job.py 第121行**:直接修改内部属性进行测试 - **建议描述**:在 `test_is_retryable_failed_at_limit` 中,通过直接赋值 `job.retry_count = 3` 来构造边界条件。虽然 Python 允许这样做,但这种“上帝模式”绕过了领域模型的业务逻辑(如重试计数器是否应该由外部直接修改)。如果后续模型改为私有属性或封装修改方法,测试将失效。 - **优化建议**:建议通过模拟业务流程(例如连续失败并重试直到达到上限)来达到该状态,以更真实地验证业务逻辑。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-27 11:07:28 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia closed this pull request 2026-07-27 20:21:06 +08:00

🗑️ 预览环境已清理

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

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

🗑️ **预览环境已清理** PR #1026 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Some required checks failed
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 7s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 1m20s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 57s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 35s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m1s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m37s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m14s
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 API Image (pull_request) Successful in 3m19s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m3s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 37s
AI Code Review / AI Code Review (pull_request) Successful in 4m14s
Required
Details
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 45m51s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 0s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Failing after 1s
CI/CD Pipeline / CI Gate (pull_request) Failing after 0s
Required
Details
ACR Cleanup / ACR Image Cleanup (pull_request_target) Failing after 1s
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
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 39s
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 / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped

Pull request closed

Sign in to join this conversation.