31 编写测试之编写单元测试
在上一篇文章中,我们讨论了如何使用异步操作与数据库进行交互。在本篇中,我们将专注于如何为我们的FastAPI应用编写单元测试。单元测试是验证我们应用程序单个组件是否按预期工作的重要步骤。在编写单元测试时,我们通常使用unittest
模块或第三方测试框架pytest
。在这篇文章中,我们将重点介绍如何使用pytest
编写简单的单元测试。
1. FastAPI应用概述
在开始之前,我们先回顾一下我们在上一篇文章中创建的FastAPI应用。假设我们有一个简单的用户API,能进行CRUD操作。我们的应用包含一个用户模型和相应的路由:
1 | from fastapi import FastAPI, HTTPException |
这个简单的应用可以创建和读取用户。接下来,我们将为这些功能编写相应的单元测试。
2. 单元测试的基本结构
单元测试通常分为三个阶段:
- 准备阶段:设置测试所需的数据和环境。
- 执行阶段:执行被测试的模块或函数。
- 断言阶段:验证结果是否符合预期。
2.1. 安装 pytest
如果你还没有安装pytest
,可以通过以下命令进行安装:
1 | pip install pytest httpx |
2.2. 编写测试用例
我们将在新的文件中创建测试用例,例如:test_main.py
。下面是为我们的用户API编写测试的示例:
1 | import pytest |
在上面的例子中:
- 我们使用
TestClient
来模拟 HTTP 请求。 test_create_user
测试了创建用户的功能。test_read_users
测试了获取用户列表的功能。
3. 运行测试
要运行测试,只需在终端中导航到包含 test_main.py
文件的目录,然后运行:
1 | pytest test_main.py |
如果一切正常,你应该会看到类似以下的输出:
1 | ================================= test session starts ================================= |
4. 进一步扩展
在真实的应用开发中,通常还需要:
- 处理异常:测试在特定条件下是否合理抛出异常。
- 边界情况:测试利用边界条件来加固你的测试(比如空输入等)。
- 数据库测试:在需要连接数据库的情况下,考虑如何模拟数据库或使用测试数据库。
4.1. 异常处理示例
下面的示例展示了如何测试错误处理:
1 | def test_create_user_without_email(): |
4.2. 边界情况示例
你也可以测试使用不合理的输入:
1 | def test_create_user_with_invalid_data(): |
5. 小结
在这一章中,我们学习了如何为我们的FastAPI应用编写单元测试,包括创建、读取用户的API。单元测试不只是确保代码的质量,更是确保我们在进行变更时不会引入新的错误。
在下一篇文章中,我们将进一步探讨如何使用 pytest
进行更深入的测试,涉及到更复杂的用例以及如何通过pytest
的功能来简化测试过程。希望大家能继续关注!
31 编写测试之编写单元测试