【发布时间】:2021-09-06 13:57:34
【问题描述】:
我有一个类 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 与MockApi 装饰器中提供的MockApi 实例不同。有没有更好的测试方法?
【问题讨论】:
标签: python unit-testing magicmock