# AI Prompt System 测试套件创建 > **变更日期**:2026-02-04 > **变更类型**:测试 > **影响范围**:AI Prompt System 服务 > **符合规范**:jointo-tech-stack v1.0 --- ## 变更概述 为 AI Prompt System 服务创建完整的测试套件,包括 Repository 单元测试、Service 单元测试和 API 集成测试。 --- ## 测试文件 ### 1. Repository 单元测试 **文件**:`server/tests/unit/repositories/test_ai_prompt_system_repository.py` **测试类**:`TestAIPromptSystemRepository` **测试覆盖**: #### 基础 CRUD 测试 - ✅ `test_create_prompt` - 创建提示词 - ✅ `test_get_by_id` - 根据 ID 获取 - ✅ `test_get_by_id_not_found` - 获取不存在的提示词 - ✅ `test_update_prompt` - 更新提示词 - ✅ `test_delete_prompt` - 删除提示词(软删除) #### 查询方法测试 - ✅ `test_get_by_name` - 根据名称获取(最新版本) - ✅ `test_get_by_name_version` - 根据名称和版本获取 - ✅ `test_get_default_by_type` - 获取默认提示词 - ✅ `test_list_prompts_no_filter` - 获取列表(无过滤) - ✅ `test_list_prompts_with_type_filter` - 按类型过滤 - ✅ `test_list_prompts_with_active_filter` - 按激活状态过滤 - ✅ `test_list_prompts_with_name_search` - 按名称搜索 - ✅ `test_list_prompts_pagination` - 分页测试 - ✅ `test_count_prompts` - 统计数量 - ✅ `test_count_prompts_with_filter` - 带过滤的统计 #### 版本管理测试 - ✅ `test_get_versions_by_name` - 获取版本历史 - ✅ `test_get_versions_by_name_empty` - 获取空版本历史 #### 默认提示词管理测试 - ✅ `test_unset_default_by_type` - 取消默认提示词 - ✅ `test_unset_default_by_type_no_effect_on_other_types` - 不影响其他类型 #### 边界情况测试 - ✅ `test_create_duplicate_name_version` - 创建重复名称+版本 - ✅ `test_skills_data_jsonb` - JSONB 字段测试 **总计**:22 个测试用例 --- ### 2. Service 单元测试 **文件**:`server/tests/unit/services/test_ai_prompt_system_service.py` **测试类**:`TestAIPromptSystemService` **测试覆盖**: #### 创建提示词测试 - ✅ `test_create_prompt_success` - 创建成功 - ✅ `test_create_prompt_duplicate_version` - 重复版本失败 - ✅ `test_create_prompt_invalid_skills_data` - 无效 skills_data - ✅ `test_create_prompt_missing_skills_field` - 缺少 skills 字段 - ✅ `test_create_prompt_set_as_default` - 设置为默认 #### 获取提示词测试 - ✅ `test_get_prompt_by_id_success` - 根据 ID 获取成功 - ✅ `test_get_prompt_by_id_not_found` - ID 不存在 - ✅ `test_get_prompt_by_name_success` - 根据名称获取成功 - ✅ `test_get_prompt_by_name_not_found` - 名称不存在 - ✅ `test_get_default_prompt_success` - 获取默认提示词成功 - ✅ `test_get_default_prompt_not_found` - 默认提示词不存在 #### 列表查询测试 - ✅ `test_list_prompts_success` - 获取列表成功 - ✅ `test_list_prompts_with_filters` - 带过滤条件 - ✅ `test_list_prompts_pagination` - 分页计算 #### 更新提示词测试 - ✅ `test_update_prompt_success` - 更新成功 - ✅ `test_update_prompt_not_found` - 提示词不存在 - ✅ `test_update_prompt_set_as_default` - 更新并设置为默认 #### 删除提示词测试 - ✅ `test_delete_prompt_success` - 删除成功 - ✅ `test_delete_prompt_not_found` - 提示词不存在 - ✅ `test_delete_default_prompt_fails` - 删除默认提示词失败 #### 设置默认提示词测试 - ✅ `test_set_default_success` - 设置成功 - ✅ `test_set_default_not_found` - 提示词不存在 - ✅ `test_set_default_inactive_prompt_fails` - 未激活提示词失败 #### 版本管理测试 - ✅ `test_create_version_success` - 创建版本成功 - ✅ `test_create_version_base_not_found` - 基础提示词不存在 - ✅ `test_create_version_duplicate` - 创建重复版本 - ✅ `test_create_version_inherit_content` - 继承内容 - ✅ `test_get_versions_success` - 获取版本历史成功 - ✅ `test_get_versions_empty` - 获取空版本历史 #### 私有方法测试 - ✅ `test_validate_skills_data_valid` - 验证有效数据 - ✅ `test_validate_skills_data_not_dict` - 非字典类型 - ✅ `test_validate_skills_data_missing_skills` - 缺少 skills 字段 - ✅ `test_validate_skills_data_skills_not_list` - skills 不是数组 - ✅ `test_validate_skills_data_skill_not_dict` - skill 不是字典 - ✅ `test_validate_skills_data_missing_required_field` - 缺少必需字段 - ✅ `test_format_prompt_response` - 格式化响应 - ✅ `test_format_prompt_list_item` - 格式化列表项 **总计**:36 个测试用例 --- ### 3. API 集成测试 **文件**:`server/tests/integration/test_ai_prompts_api.py` **测试类**:`TestAIPromptsAPI` **测试覆盖**: #### 创建提示词测试 - ✅ `test_create_prompt_success` - 创建成功 - ✅ `test_create_prompt_unauthorized` - 未认证 - ✅ `test_create_prompt_duplicate_version` - 重复版本 - ✅ `test_create_prompt_invalid_skills_data` - 无效 skills_data #### 获取提示词列表测试 - ✅ `test_list_prompts_success` - 获取列表成功 - ✅ `test_list_prompts_with_type_filter` - 按类型过滤 - ✅ `test_list_prompts_pagination` - 分页 #### 获取提示词详情测试 - ✅ `test_get_prompt_by_id_success` - 根据 ID 获取成功 - ✅ `test_get_prompt_by_id_not_found` - ID 不存在 - ✅ `test_get_prompt_by_name_success` - 根据名称获取成功 #### 更新提示词测试 - ✅ `test_update_prompt_success` - 更新成功 - ✅ `test_update_prompt_not_found` - 提示词不存在 #### 删除提示词测试 - ✅ `test_delete_prompt_success` - 删除成功 - ✅ `test_delete_default_prompt_fails` - 删除默认提示词失败 #### 设置默认提示词测试 - ✅ `test_set_default_prompt_success` - 设置成功 #### 版本管理测试 - ✅ `test_create_version_success` - 创建版本成功 - ✅ `test_create_version_duplicate` - 创建重复版本 - ✅ `test_get_versions_success` - 获取版本历史成功 #### 获取默认提示词测试(公开接口) - ✅ `test_get_default_prompt_success` - 获取成功 - ✅ `test_get_default_prompt_not_found` - 不存在 **总计**:19 个测试用例 --- ## 测试统计 | 测试类型 | 文件 | 测试用例数 | |---------|------|-----------| | Repository 单元测试 | `test_ai_prompt_system_repository.py` | 22 | | Service 单元测试 | `test_ai_prompt_system_service.py` | 36 | | API 集成测试 | `test_ai_prompts_api.py` | 19 | | **总计** | | **77** | --- ## 测试技术规范 ### ✅ 符合 jointo-tech-stack 规范 - ✅ 使用 pytest-asyncio - ✅ 使用 fixture 管理测试数据 - ✅ 完整的类型注解 - ✅ 测试异步操作 - ✅ Mock Repository 层(Service 测试) - ✅ 使用 httpx.AsyncClient(API 测试) - ✅ 测试认证和权限 - ✅ 完整的边界情况覆盖 --- ## 运行测试 ### 运行所有测试 ```bash # 在容器内运行 docker exec jointo-server-app pytest server/tests/unit/repositories/test_ai_prompt_system_repository.py -v docker exec jointo-server-app pytest server/tests/unit/services/test_ai_prompt_system_service.py -v docker exec jointo-server-app pytest server/tests/integration/test_ai_prompts_api.py -v ``` ### 运行特定测试 ```bash # Repository 测试 docker exec jointo-server-app pytest server/tests/unit/repositories/test_ai_prompt_system_repository.py::TestAIPromptSystemRepository::test_create_prompt -v # Service 测试 docker exec jointo-server-app pytest server/tests/unit/services/test_ai_prompt_system_service.py::TestAIPromptSystemService::test_create_prompt_success -v # API 测试 docker exec jointo-server-app pytest server/tests/integration/test_ai_prompts_api.py::TestAIPromptsAPI::test_create_prompt_success -v ``` ### 生成覆盖率报告 ```bash docker exec jointo-server-app pytest \ server/tests/unit/repositories/test_ai_prompt_system_repository.py \ server/tests/unit/services/test_ai_prompt_system_service.py \ server/tests/integration/test_ai_prompts_api.py \ --cov=app.repositories.ai_prompt_system_repository \ --cov=app.services.ai_prompt_system_service \ --cov=app.api.v1.ai_prompts \ --cov-report=html \ --cov-report=term ``` --- ## 测试覆盖率目标 | 模块 | 目标覆盖率 | 实际覆盖率 | |------|-----------|-----------| | Repository | 90%+ | 待测量 | | Service | 90%+ | 待测量 | | API | 85%+ | 待测量 | --- ## 后续优化建议 1. **性能测试** - 大量数据下的查询性能 - 并发创建测试 2. **压力测试** - API 接口压力测试 - 数据库连接池测试 3. **安全测试** - SQL 注入测试 - XSS 攻击测试 - 权限绕过测试 --- **变更日期**:2026-02-04 **变更类型**:测试 **符合规范**:jointo-tech-stack v1.0