我在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
是什么原因导致上述差异?
以及如何使修补程序在两种情况下都能正常工作?
谢谢。