簡體   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