我有一个方法,我想进行单元测试 - 运行。在我的类初始化期间,我将另一个类的对象传递给它。所述对象用它的方法获取数据。
class MyClass:
def __init__(self, data_obj):
self.data_obj = data_obj
self.id = 100
def run():
data = self.data_obj.fetchData(self.id)
现在,当我编写单元测试时,我不想再次初始化数据类,因为在初始化期间,它会产生许多我不想要的昂贵的API调用重复。
如何模拟data_obj和data_obj的方法fetchData?
现在我想做的是通过提供一个伪id来测试run方法,以及假id应返回的内容并测试run方法的整个流程。我如何模拟传递给我的类的数据类对象并说出它应该返回什么?
class TestRunMethod(unittest.TestCase):
def test_run(self):
mc = MyClass(mock_data_obj)
self.id = 200 # some fake id
# Make self.data_obj.fetchData(id=200) return 'xyz'
output = mc.run()
assertEqual(output, 'xyz')
我正在阅读模拟教程。我认为我需要做的是修补data_obj的方法并指定返回值
@patch('mymodule.test.Data')
class TestRunMethod(unittest.TestCase):
def test_run(self, mock_data_obj):
mc = MyClass(mock_data_obj)
self.id = 200 # some fake id
mock_data_obj.fetchData(self.id).return_value = 'xyz'
output = mc.run()
assertEqual(output, 'xyz')
这是对的吗?如果不是,我该怎么纠正这个?