繁体   English   中英

如何使用 Python unittest 模块修补属于 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['alpha']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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM