如何使用 Python 单元测试模块修补属于 class 的字典的值?
How do I patch the values of a dictionary that belongs to a class with the Python unittest module?
举个例子:
class Devices:
the_dict = {'apple': some_class(), 'android': some_class()}
在这个例子中,我想修补 some_class().
我无法模拟 class 本身(在本例中为 Devices),因为那将是我要测试的 class首先。
我尝试通过修补字典本身来解决这个问题,但模拟无法识别不同键和值之间的差异。例如,假设我创建了一个名为 mocked_dict 的模拟,测试看不出 mocked_dict[[=] 之间的区别35=]] 和 mocked_dict['beta']。我也试过 patch.dict,但没有用。我只在使用 return_value.
时出现属性错误
非常感谢任何帮助。谢谢!
不确定这是否是您要查找的内容,但考虑添加辅助方法 mock_device_dict
以猴子修补给定 Devices
实例的字典:
import unittest
from unittest.mock import Mock
class some_class:
pass
class Devices:
the_dict = {'apple': some_class(), 'android': some_class()}
class MyTest(unittest.TestCase):
def mock_device_dict(self, devices_instance):
devices_instance.the_dict = {k: Mock() for k in devices_instance.the_dict}
return devices_instance
def test_device(self):
devices = Devices()
self.mock_device_dict(devices)
# continue with your test here ...
if __name__ == '__main__':
unittest.main()
举个例子:
class Devices:
the_dict = {'apple': some_class(), 'android': some_class()}
在这个例子中,我想修补 some_class().
我无法模拟 class 本身(在本例中为 Devices),因为那将是我要测试的 class首先。
我尝试通过修补字典本身来解决这个问题,但模拟无法识别不同键和值之间的差异。例如,假设我创建了一个名为 mocked_dict 的模拟,测试看不出 mocked_dict[[=] 之间的区别35=]] 和 mocked_dict['beta']。我也试过 patch.dict,但没有用。我只在使用 return_value.
时出现属性错误非常感谢任何帮助。谢谢!
不确定这是否是您要查找的内容,但考虑添加辅助方法 mock_device_dict
以猴子修补给定 Devices
实例的字典:
import unittest
from unittest.mock import Mock
class some_class:
pass
class Devices:
the_dict = {'apple': some_class(), 'android': some_class()}
class MyTest(unittest.TestCase):
def mock_device_dict(self, devices_instance):
devices_instance.the_dict = {k: Mock() for k in devices_instance.the_dict}
return devices_instance
def test_device(self):
devices = Devices()
self.mock_device_dict(devices)
# continue with your test here ...
if __name__ == '__main__':
unittest.main()