在另一个方法

时间:2017-07-05 01:52:01

标签: python unit-testing mocking pymock

我有一个方法,我想进行单元测试 - 运行。在我的类初始化期间,我将另一个类的对象传递给它。所述对象用它的方法获取数据。

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')

这是对的吗?如果不是,我该怎么纠正这个?

0 个答案:

没有答案