How to mock a dictionary in Python

How to mock a dictionary in Python is a good/direct question someone else can search, so:

  1. I suggest MagicMock instead of Mock
  2. Overload the __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

Related Questions:

  • How to let MagicMock behave like a dict?
  • Understanding __getitem__ method

=== EDIT ===

As a function for direct copy/pasting

def mock_dict(d):
  m = MagicMock()
  m.__getitem__.side_effect = d.__getitem__
  return m

Leave a Comment