繁体   English   中英

FastAPI 中的模拟依赖类

[英]Mock Dependency classes in 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)

但这似乎不起作用。

我如何模拟这种依赖关系?

您可以模拟方法本身

def mock_get_value(self, s: str):
   return "test_str"

monkeypatch.setattr(SomeManager, "get_value_from", mock_get_value)

您可以尝试使用FastApi 覆盖依赖项的方式 我创建了一个包装库,它添加了一个名为: fastapi_dep的 pytest 夹具。

像这样使用它:

def test_create_user(fastapi_dep):
    def mock_get_value():
        return "test_str"
    with fastapi_dep(app).override({SomeManager.get_value_from: mock_get_value}):
        response = client.post(....)
        # the rest of your test

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM