title: How to mock asyncio coroutines?
body: <p>The following code fails with <code>TypeError: 'Mock' object is not iterable</code> in <code>ImBeingTested.i_call_other_coroutines</code> because I've replaced <code>ImGoingToBeMocked</code> by a Mock object.  </p>
  
  <p>How can I mock coroutines?</p>
  
  <pre><code>class ImGoingToBeMocked:
      @asyncio.coroutine
      def yeah_im_not_going_to_run(self):
          yield from asyncio.sleep(1)
          return "sup"
  
  class ImBeingTested:
      def __init__(self, hidude):
          self.hidude = hidude
  
      @asyncio.coroutine
      def i_call_other_coroutines(self):
          return (yield from self.hidude.yeah_im_not_going_to_run())
  
  class TestImBeingTested(unittest.TestCase):
  
      def test_i_call_other_coroutines(self):
          mocked = Mock(ImGoingToBeMocked)
          ibt = ImBeingTested(mocked)
  
          ret = asyncio.get_event_loop().run_until_complete(ibt.i_call_other_coroutines())
  </code></pre>