task_auto_plan1/tests/test_basic.py

112 lines
4.4 KiB
Python
Raw Normal View History

2026-04-25 04:29:20 +00:00
"""
基础单元测试 测试 TodoService 的核心功能
运行方式
cd codegen-runs/codegen_a2cef5070965479b93c5b3c07d4c8216
pytest tests/ -v
"""
import pytest
from app.services import TodoService, TodoCreate, TodoUpdate
@pytest.fixture
def service() -> TodoService:
"""每个测试用例使用独立的 TodoService 实例。"""
return TodoService()
class TestTodoService:
"""TodoService 核心功能测试。"""
def test_list_todos_should_return_mock_data(self, service: TodoService):
"""测试初始化时自动生成假数据。"""
todos = service.list_todos()
assert len(todos) == 5 # 初始化了 5 条假数据
def test_create_todo_should_return_created_todo(self, service: TodoService):
"""测试创建待办事项。"""
todo_in = TodoCreate(title="新任务", completed=True)
todo = service.create_todo(todo_in)
assert todo.title == "新任务"
assert todo.completed is True
assert todo.id > 0
def test_get_todo_should_return_correct_todo(self, service: TodoService):
"""测试根据 ID 获取待办事项。"""
# 先创建
created = service.create_todo(TodoCreate(title="测试任务"))
# 再获取
fetched = service.get_todo(created.id)
assert fetched is not None
assert fetched.id == created.id
assert fetched.title == "测试任务"
def test_get_todo_should_return_none_when_not_found(self, service: TodoService):
"""测试获取不存在的待办事项返回 None。"""
todo = service.get_todo(99999)
assert todo is None
def test_update_todo_should_update_title(self, service: TodoService):
"""测试部分更新待办事项的标题。"""
created = service.create_todo(TodoCreate(title="旧标题"))
updated = service.update_todo(created.id, TodoUpdate(title="新标题"))
assert updated is not None
assert updated.title == "新标题"
assert updated.completed is False # 未更新的字段保持不变
def test_update_todo_should_update_completed(self, service: TodoService):
"""测试部分更新待办事项的完成状态。"""
created = service.create_todo(TodoCreate(title="任务", completed=False))
updated = service.update_todo(created.id, TodoUpdate(completed=True))
assert updated is not None
assert updated.completed is True
assert updated.title == "任务" # 未更新的字段保持不变
def test_update_todo_should_return_none_when_not_found(self, service: TodoService):
"""测试更新不存在的待办事项返回 None。"""
result = service.update_todo(99999, TodoUpdate(title=""))
assert result is None
def test_delete_todo_should_return_true(self, service: TodoService):
"""测试删除存在的待办事项返回 True。"""
created = service.create_todo(TodoCreate(title="待删除"))
result = service.delete_todo(created.id)
assert result is True
# 确认已删除
assert service.get_todo(created.id) is None
def test_delete_todo_should_return_false_when_not_found(self, service: TodoService):
"""测试删除不存在的待办事项返回 False。"""
result = service.delete_todo(99999)
assert result is False
def test_list_todos_after_create_and_delete(self, service: TodoService):
"""测试增删操作后列表长度的变化。"""
initial_count = len(service.list_todos())
# 创建 2 个
t1 = service.create_todo(TodoCreate(title="A"))
t2 = service.create_todo(TodoCreate(title="B"))
assert len(service.list_todos()) == initial_count + 2
# 删除 1 个
service.delete_todo(t1.id)
assert len(service.list_todos()) == initial_count + 1
# 删除另一个
service.delete_todo(t2.id)
assert len(service.list_todos()) == initial_count
@pytest.mark.asyncio
async def test_fastapi_health_check():
"""简单的 FastAPI 健康检查测试(使用 TestClient"""
from httpx import AsyncClient, ASGITransport
from app.main import app
transport = ASGITransport(app=app)
async with AsyncClient(transport=transport, base_url="http://test") as client:
response = await client.get("/")
assert response.status_code == 200
data = response.json()
assert "service" in data
assert data["service"] == "Todo 管理服务"