我对 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
是什么导致了上述差异?
以及如何在这两种情况下使补丁正常工作?
提前致谢。