<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hey all,<br>
    <br>
    I've been using Michael Foord's awesome <i>mock</i> package and
    I've loved it... now I'm running into an issue. I'm patching a
    class, pretty simple:<br>
    <blockquote>from my.module.path import Class<br>
      patch = mock.patch('my.module.path.Class', spec=Class)<br>
      mocked = patch.start()<br>
      mocked.return_value = MyReplacementClass()<br>
    </blockquote>
    I'm doing things this way because I need to mock out a class, but
    provide an alternate implementation that uses similar logic to the
    real class (basically mocking an external API by turning it into a
    memory-mapped API).<br>
    <br>
    Somewhere else, my code gets this mock client and a function calls:<br>
    <blockquote>isinstance(client, my.module.path.Class): ...<br>
    </blockquote>
    This call fails with:<br>
    <blockquote>TypeError: isinstance() arg 2 must be a class, type, or
      tuple of classes and type<br>
    </blockquote>
    This was confusing to me, so I did a bit of digging to figure out
    what <i>Class</i> really was, but all was well. Here's what I got:<br>
    <blockquote>&lt;MagicMock spec='Class' id='50389456'&gt;<br>
    </blockquote>
    Seems right to me! Additionally, if I change the instance check in
    the production code to:<br>
    <blockquote>isinstance(client, my.module.path.Class._spec_class):
      ...<br>
    </blockquote>
    It works just fine! I can't do this for obvious reasons, but it
    seems to prove that the MagicMock at least has the correct
    information somewhere, it's just not being properly inspected by
    isinstance().<br>
    <br>
    Any thoughts? I really need this to work.<br>
  </body>
</html>