我正在为我的 Flask 项目编写测试,并尝试模拟我的数据库模型。代码看起来像这样:
import unittest.mock
@unittest.mock.patch("server.models.user")
def test_that_response_contain_correct_user_data(self, mocked_user):
这会导致此错误消息:
TypeError: test_that_response_contain_correct_user_data() missing 1 required positional argument: 'mocked_user'
所以看起来模拟框架没有将模拟数据注入到函数中。有谁知道可能是什么原因造成的?
事实证明,您无法传递
self
参数,因为它不是在调用期间传递的,而是可能稍后添加的。因此,为了让它工作,我必须硬编码一个返回值。
我必须改变这一点:
from unittest.mock import patch
from path.to.file import ClassName
@pytest.fixture
def mock_fn():
with patch("path.to.file.ClassName.function_to_mock", wraps=ClassName.function_to_mock) as mocked_fn:
yield mocked_fn
def test_function_to_mock(mock_fn):
...
assert mock_fn.call_count == 2
对此:
...
@pytest.fixture
def mock_fn():
with patch.object(ClassName, "function_to_mock") as mocked_fn: # Just patch here
yield mocked_fn
def test_function_to_mock(mock_fn):
mock_fn.return_value = (False, 4, True, 1) # And then hardcode return value
...
assert mock_fn.call_count == 2
您需要从unittest.mock导入补丁并使用该装饰器注入模拟数据。
from unittest.mock import patch
@patch("server.models.user")
def test_that_response_contain_correct_user_data(self, mocked_user):