【发布时间】:2022-07-15 00:17:27
【问题描述】:
我想为我的 FastAPI 端点编写测试
我的代码示例:
from fastapi import FastAPI
from fastapi.testclient import TestClient
app = FastAPI()
@app.get("/todos")
async def get_todo_by_title(title: str,current_user: User = Depends(get_current_user))
document = await collection.find_one({"title": title})
return document
client = TestClient(app)
def test_get_todo_by_title():
response = client.get("/todos")
assert response.status_code == 200
测试我的端点的最佳方法是什么?
我想用fake DB进行测试,比如json文件
db = {
todos: [...]
}
【问题讨论】:
-
最好的方法是在 mongodb 中用一个测试数据库用测试端点,这样您就可以确定它们按您的预期工作。下一种可能性是模拟您的集合查询或创建一个允许遵循 mongodb 集合 API 的某些操作的假货。更好的解决方案是将您的实际 mongdb 查询移动到您使用 Depends 注入到您的视图中的专用服务,然后模拟此服务以返回一组在 json 文件中定义的数据。但首先:所有这些间接真的是必要的吗?首先使用真正的 mongodb 运行测试
-
所以如果我在真正的 MongoDB 上运行我的测试,你知道我应该如何跳过取决于吗?使用假令牌进行测试?
-
你在考虑用户依赖吗?还是别的什么?
-
关于用户依赖
-
您可以让您的应用程序允许添加用户并以用户身份进行身份验证(即真实方式),或者您可以使用
app.dependency_overrides提供一个自定义函数,该函数在您的测试。 fastapi.tiangolo.com/advanced/testing-dependencies -app.dependency_overrides[get_current_user] = lambda: return {'id': 1, 'username': 'foo'}
标签: mongodb unit-testing pytest fastapi mongomock