Created
July 9, 2014 01:01
-
-
Save peterldowns/c51711e5e68f5d96bd33 to your computer and use it in GitHub Desktop.
Simple way of creating Mock objects from nested dictionaries.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import mock | |
def mock_object(data=None): | |
result = mock.MagicMock() | |
for key, value in data.iteritems(): | |
if isinstance(value, dict): | |
result.configure_mock(**{ | |
key: mock_object(value), | |
}) | |
else: | |
result.configure_mock(**{ | |
key: value, | |
}) | |
return result | |
MyFactory = mock_object({ | |
'return_value' : { | |
'type' : 'Factory', | |
'get_person' : { | |
'return_value' : { | |
'type' : 'Person', | |
'get_friends' : { | |
'side_effect' : ValueError("Too many friends"), | |
}, | |
'get_enemies' : { | |
'return_value' : [], | |
}, | |
'say_hello' : lambda: 'hello', | |
'say_hello_2' : { | |
'return_value' : 'hello', | |
}, | |
}, | |
}, | |
}, | |
}) | |
factory = MyFactory() | |
assert factory.type == 'Factory' | |
person = factory.get_person() | |
assert person.type == 'Person' | |
try: | |
friends = person.get_friends() | |
except ValueError as e: | |
print '(caught raised error:) e' | |
enemies = person.get_enemies() | |
assert not enemies | |
r_hello = person.say_hello() | |
r_hello_2 = person.say_hello_2() | |
assert r_hello == r_hello_2 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Found this helper function useful while mocking the Stripe API in some unit tests – the functions I was testing did various things with results of consecutive API calls and their nested responses.