Python 单元测试 Mock import & check assert 调用



我有一个类ProductionClass,其中包含一个要测试的方法method_to_test。类ProductionClass依赖于api,我想在测试中模拟它。

from my_module.apis import api
class ProductionClass:
def method_to_test:
data = api.method_to_mock()
api.method_to_check_call(data)

测试代码如下:对于api,我有一个模拟类MockApi,我通过在@patch装饰器中引用它来使用它。

from unittest.mock import patch, MagicMock
class MockApi:
def method_to_mock():
return some_mock_data
def method_to_check_call(data):
pass
class TestClass:
@patch('my_module.apis.api', MagicMock(return_value=MockApi()))
def test_check_called_with(self):
from module_of_class_production_class.ProductionClass import method_to_test
mock_api = MockApi()
method_to_test()
some_data = { ... }
mock.method_to_check_call.assert_called_with(some_data)

问题是它不起作用,因为mock_api@patch装饰器中提供的MockApi实例不同。有更好的方法来测试吗?

我还没有对此进行测试,但我认为您的补丁对象将作为第一个参数传递给test_check_called_with,如下所示:

@patch('my_module.apis.api', MagicMock(return_value=MockApi()))
def test_check_called_with(self, your_magic_mock):
# Rest of code

您也可以使用with构造,如下所示:

def test_check_called_with(self):
my_api = MockApi()
with patch('my_module.apis.api', MagicMock(return_value=my_api)) as my_mock_api:
# Your code here

您可以在此处查看官方python文档以了解更多详细信息:https://docs.python.org/3/library/unittest.mock.html#quick-引导

相关内容

  • 没有找到相关文章

最新更新