Unit testing 使用每个测试的不同依赖项覆盖测试的FastAPI依赖项的最佳方法

Unit testing 使用每个测试的不同依赖项覆盖测试的FastAPI依赖项的最佳方法,unit-testing,dependency-injection,overriding,pytest,fastapi,Unit Testing,Dependency Injection,Overriding,Pytest,Fastapi,根据FastAPI,覆盖测试依赖项的推荐方法是在运行所有测试之前全局执行: async def override_dependency(q: Optional[str] = None): return {"q": q, "skip": 5, "limit": 10} app.dependency_overrides[common_parameters] = override_dependency

根据FastAPI,覆盖测试依赖项的推荐方法是在运行所有测试之前全局执行:

    async def override_dependency(q: Optional[str] = None):
        return {"q": q, "skip": 5, "limit": 10}


    app.dependency_overrides[common_parameters] = override_dependency


    def test_override_in_items():
        response = client.get("/items/")
        assert response.status_code == 200
        assert response.json() == {
            "message": "Hello Items!",
            "params": {"q": None, "skip": 5, "limit": 10},
        }


    def test_override_in_items_with_q():
        response = client.get("/items/?q=foo")
        assert response.status_code == 200
        assert response.json() == {
            "message": "Hello Items!",
            "params": {"q": "foo", "skip": 5, "limit": 10},
        }
但这允许您在整个测试运行中只覆盖依赖项一次。如果我需要对每个测试有不同的依赖关系,该怎么办?覆盖测试主体内部的依赖项并在测试完成后重置它们是否安全?像这样

def test_override_in_items():

    app.dependency_overrides[common_parameters] = override_dependency

    response = client.get("/items/")
    assert response.status_code == 200
    assert response.json() == {
        "message": "Hello Items!",
        "params": {"q": None, "skip": 5, "limit": 10},
    }

    app.dependency_overrides[common_parameters] = {}

像上面的例子那样做有什么缺点?

您可以通过将app.dependency\u覆盖设置为空
dict:

app.dependency_overrides = {}

您可以通过将app.dependency\u覆盖设置为空
dict:

app.dependency_overrides = {}

这样做很危险。这将破坏其他组件可能设置的其他依赖项覆盖。这样做很危险。这将破坏其他组件可能设置的其他依赖项覆盖