FastAPI 中的模拟依赖类
我有一个 api,它代表以下结构:
from fastapi import FastAPI, Depends, Request, APIRouter
class SomeManager:
def get_value_from(self, s: str):
return GetValue(s, self)
class GetValue:
def __init__(self, value: str, parent: SomeManager):
self.str = str
def __call__(self, *args, **kwargs) -> str:
return self.str
api = FastAPI()
manager = SomeManager()
def generate_routes(m: SomeManager):
router = APIRouter(prefix="/test")
@router.get("")
def test(value = Depends(m.get_value_from("hi"))):
return value
return router
test_router = generate_routes(manager)
api.include_router(test_router)
我想测试我的 API,覆盖 m.get_value_from
方法。我希望做类似的事情:
def mock_get_value():
return "test_str"
monkeypatch.setattr(GetValue, "__call__", mock_get_value)
但它似乎不起作用。
我如何模拟这种依赖关系?
I have an api which is representative of the structure of:
from fastapi import FastAPI, Depends, Request, APIRouter
class SomeManager:
def get_value_from(self, s: str):
return GetValue(s, self)
class GetValue:
def __init__(self, value: str, parent: SomeManager):
self.str = str
def __call__(self, *args, **kwargs) -> str:
return self.str
api = FastAPI()
manager = SomeManager()
def generate_routes(m: SomeManager):
router = APIRouter(prefix="/test")
@router.get("")
def test(value = Depends(m.get_value_from("hi"))):
return value
return router
test_router = generate_routes(manager)
api.include_router(test_router)
I want to test my API, overwriting the m.get_value_from
method. I was hoping to do something like:
def mock_get_value():
return "test_str"
monkeypatch.setattr(GetValue, "__call__", mock_get_value)
But it doesn't seem to work.
How can I mock this dependency?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以尝试使用FastApi 方式覆盖依赖项。我创建了一个 包装库,它添加了一个名为:
fastapi_dep< /代码>。
像这样使用它:
You can try to use the FastApi way of overriding dependencies. I created a wrapper library which adds a pytest fixture named:
fastapi_dep
.Use it like so:
您可以模拟方法本身
You can mock the method itself