Skip to content

Instantly share code, notes, and snippets.

@stephenmcd
Created August 6, 2011 07:28
Show Gist options
  • Save stephenmcd/1129135 to your computer and use it in GitHub Desktop.
Save stephenmcd/1129135 to your computer and use it in GitHub Desktop.
Mini Mock
class MiniMock(object):
"""
A callable object that will always return a value for any
attribute/index/slice/call accessed. The value returned is a new
MiniMock instance allowing for successful chained access.
"""
def __getitem__(self, value):
"""
Main entry point for each type of access. Stores the value
returned so that the same object is always given for the same
value.
"""
return self.__dict__.setdefault(repr(value), MiniMock())
def __getattr__(self, name):
return self[name]
def __call__(self, *args, **kwargs):
return self[args, kwargs]
def __iter__(self):
return iter([])
def __len__(self):
return 0
if __name__ == "__main__":
mm = MiniMock()
assert mm.a == mm.a
assert mm.a != mm.b
assert mm[0] == mm[0]
assert mm[0] != mm[1]
assert mm[0:1] == mm[0:1]
assert mm[0:1] != mm[0:1:1]
assert mm["foo"] == mm["foo"]
assert mm["foo"] != mm["bar"]
assert mm() == mm()
assert mm("baz") != mm()
assert len(mm) == len([x for x in mm])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment