Mimic doubles¶
Usually double instances behave as collaborator surrogates, but they do not expose the same class hierarchy, and usually this is pretty enough when the code uses “duck typing”:
class A(object):
pass
class B(A):
pass
>>> from doublex import Spy
>>> spy = Spy(B())
>>> isinstance(spy, Spy)
True
>>> isinstance(spy, B)
False
But some third party library DOES strict type checking using isinstance(). That
invalidates our doubles. For these cases you can use Mimic’s. Mimic class decorates any
double class to achieve full replacement instances (Liskov principle):
>>> from doublex import Stub, Mimic
>>> spy = Mimic(Spy, B)
>>> isinstance(spy, B)
True
>>> isinstance(spy, A)
True
>>> isinstance(spy, Spy)
True
>>> isinstance(spy, Stub)
True
>>> isinstance(spy, object)
True