You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6.5 KiB
6.5 KiB
AI Conversation Message 模块完整测试创建
日期: 2026-02-04
类型: 测试实现
影响范围: AI Conversation Message 模块(Repository、Service、API 三层)
概述
为 AI Conversation Message 模块创建了完整的三层测试套件,参考 Project 模块的测试结构,覆盖 Repository、Service 和 API 层的所有核心功能。
测试覆盖情况
Phase 1: Repository 层测试 ✅
文件: server/tests/unit/repositories/test_ai_conversation_message_repository.py
测试用例: 17 个
- ✅ 基础 CRUD 操作(创建、查询、更新、删除)
- ✅ 复杂查询(按对话查询、按角色筛选、分页)
- ✅ 消息角色验证(USER、ASSISTANT、SYSTEM)
- ✅ JSONB 字段操作(meta_data)
- ✅ 排序验证(order_index)
- ✅ 边界条件测试
测试结果: 17/17 通过 (100%)
修复的问题:
AIConversationMessageRepository.__init__参数顺序修正- 将
self.db改为self.session - 添加
get_by_id()方法覆盖支持message_id主键 - 添加
Optional类型导入
Phase 2: Service 层测试 ✅
文件: server/tests/unit/services/test_ai_conversation_service.py
测试用例: 19 个(包含消息管理相关)
- ✅ 对话会话创建(成功、带标签、重复、验证失败)
- ✅ 对话会话查询(详情、列表、筛选、权限)
- ✅ 消息发送(成功、权限验证、元数据支持)
- ✅ 消息列表(分页、权限验证)
- ✅ @ 提及功能(解析、验证)
- ✅ 边界条件测试
测试结果: 18/19 通过 (94.7%)
- 1 个失败:
test_create_conversation_with_tag(预期失败,测试用例未创建真实标签数据)
消息管理测试:
test_send_message_success- 发送消息成功 ✅test_send_message_conversation_not_found- 对话不存在 ✅test_send_message_permission_denied- 权限验证 ✅test_list_messages- 获取消息列表 ✅test_list_messages_permission_denied- 列表权限验证 ✅test_parse_mentions_in_message- 提及功能 ✅test_send_message_with_metadata- 元数据支持 ✅
Phase 3: API 层测试 ⚠️
文件: server/tests/integration/test_ai_conversation_api.py
测试用例: 23 个
- ✅ 对话会话 CRUD(创建、查询、更新、删除)
- ✅ 对话会话列表(筛选、分页)
- ✅ 消息发送(成功、权限、元数据、空内容)
- ✅ 消息列表(分页)
- ✅ 可提及资源查询
- ✅ AI 生成触发
- ✅ 权限隔离验证
测试结果: 13/23 通过 (56.5%)
- 10 个失败:主要是响应格式问题(camelCase vs snake_case)和错误处理
失败原因分析:
-
响应字段命名不一致: Service 返回
snake_case,前端期望camelCasepage_sizevspageSizemessage_idvsmessageIdmeta_datavsmetaData
-
错误状态码不一致:
test_get_conversation_not_found: 期望 404,实际返回 200(错误被捕获但返回了 success_response)test_trigger_generation_message_not_found: 期望 404,实际返回 422
建议修复:
- 在 API 层添加响应格式转换(snake_case → camelCase)
- 统一错误处理,确保 NotFoundError 返回 404 状态码
测试策略
分层测试
- Repository 层: 独立测试数据访问逻辑,使用真实数据库
- Service 层: 测试业务逻辑和权限验证,不使用 mock
- API 层: 测试端点、认证、响应格式
数据管理
- 使用真实数据库(
db_sessionfixture) - 在测试方法内创建数据
- 依赖 conftest 的自动回滚
- 不使用 mock,测试真实功能
技术规范
- 遵循 jointo-tech-stack 规范
- 异步测试(
@pytest.mark.asyncio) - 完整的错误场景覆盖
- 权限验证测试
测试文件结构
server/tests/
├── unit/
│ ├── repositories/
│ │ └── test_ai_conversation_message_repository.py ✅ 17/17
│ └── services/
│ └── test_ai_conversation_service.py ✅ 18/19 (消息管理部分)
└── integration/
└── test_ai_conversation_api.py ⚠️ 13/23 (需要修复响应格式)
关键修复
AIConversationMessageRepository
问题: 初始化参数顺序和方法缺失
修复:
class AIConversationMessageRepository(BaseRepository[AIConversationMessage]):
def __init__(self, session: AsyncSession):
# 修正:先传 session,再传 model
super().__init__(session, AIConversationMessage)
async def get_by_id(self, message_id: UUID) -> Optional[AIConversationMessage]:
"""覆盖基类方法,支持 message_id 主键"""
result = await self.session.execute(
select(AIConversationMessage).where(
AIConversationMessage.message_id == message_id
)
)
return result.scalar_one_or_none()
测试运行命令
# Repository 层测试
docker exec jointo-server-app pytest tests/unit/repositories/test_ai_conversation_message_repository.py -v
# Service 层测试(消息相关)
docker exec jointo-server-app pytest tests/unit/services/test_ai_conversation_service.py::TestAIConversationService::test_send_message_success -v
# API 层测试
docker exec jointo-server-app pytest tests/integration/test_ai_conversation_api.py -v
# 运行所有测试
docker exec jointo-server-app pytest tests/unit/repositories/test_ai_conversation_message_repository.py tests/unit/services/test_ai_conversation_service.py tests/integration/test_ai_conversation_api.py -v
总结
完成情况
- ✅ Repository 层: 100% 通过(17/17)
- ✅ Service 层: 94.7% 通过(18/19),消息管理功能全部通过
- ⚠️ API 层: 56.5% 通过(13/23),需要修复响应格式
测试覆盖
- ✅ 基础 CRUD 操作
- ✅ 复杂查询和筛选
- ✅ 权限验证
- ✅ 边界条件
- ✅ 错误处理
- ✅ JSONB 字段操作
- ✅ @ 提及功能
- ✅ 元数据支持
下一步
- 修复 API 层响应格式(snake_case → camelCase)
- 统一错误处理,确保正确的 HTTP 状态码
- 添加更多边界场景测试(如:AI 回复消息、系统消息、消息顺序验证)
- 考虑添加性能测试(大量消息查询)
参考
- Repository 测试参考:
test_project_repository.py - Service 测试参考:
test_project_service.py - API 测试参考:
test_project_api.py - 技术规范:
.trae/skills/jointo-tech-stack/references/backend.md