0

我对 pytest 和模拟补丁有一个奇怪的问题。
我的 django 应用程序在收到请求时调用货币兑换的 API。
我想在测试时修补它们,但它不起作用。

下面的命令成功。它不会向真实的交换服务器发送任何请求。

pipenv run pytest --reuse-db myapp

但是,下面的命令失败了,因为它将请求发送到真正的 Exchange API 服务器。好像打补丁没用。

pipenv run pytest --reuse-db

项目结构如下所示。

django_proj/
    django_proj/
    myapp/
        views.py
        urls.py
        backends/
            backend1.py
            backend2.py
        tests/
            test_views.py

test_views.py

class MockBackend1:
    # Some mock methods
    # They returns mock values instead of sending requests to real servers.


class MockBackend2:
    # Some mock methods
    # They returns mock values instead of sending requests to real servers.


@patch('myapp.backends.backend1.Backend1', MockBackend1)
@patch('myapp.backends.backend2.Backend2', MockBackend2)
class TestListAPIView:
    @pytest.fixture
    ...

    def test_list(self, client, params):
        """Test list."""
        response = client.get(
            reverse("myapp:list"),
            data=params
        )

        content = response.json()

        # sample assertion
        asset content == mocked_content

是什么导致了上述差异?
以及如何在这两种情况下使补丁正常工作?

提前致谢。

4

0 回答 0