如何在Python中模拟字典

时间:2016-07-11 04:19:36

标签: python mocking

假设我有这样的功能:

def do_something(dict_obj):
   # access to the dict_obj then do some stuff
   eg.
   if dict_obj['doors']:
      do_something_with_doors()
   map_car_make(dict_obj['make'])
   ...

   if dict_obj['is_active']:
        do_something_else()

我想嘲笑dict_obj拥有is_active元素并且不关心其余部分,我该怎么做?

2 个答案:

答案 0 :(得分:0)

您可以使用dict.get方法返回您所选择的可以模拟is_active条目存在的默认值。

答案 1 :(得分:0)

如何在Python中模拟字典 是其他人可以搜索的一个好/直接问题,因此:

  1. 我建议使用MagicMock而不是Mock
  2. 重载__getitem__
from unittest.mock import MagicMock

m = MagicMock()
d = {'key_1': 'value'}
m.__getitem__.side_effect = d.__getitem__

# dict behaviour
m['key_1'] # => 'value'
m['key_2'] # => raise KeyError

# mock behaviour
m.foo(42)
m.foo.assert_called_once_with(43) # => raise AssertionError

相关问题: