Skip to content

Instantly share code, notes, and snippets.

@karantan
Forked from Sorseg/problem.py
Last active February 24, 2017 15:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save karantan/4225cfad7fa6ffab561d5c9667e9cbd5 to your computer and use it in GitHub Desktop.
Save karantan/4225cfad7fa6ffab561d5c9667e9cbd5 to your computer and use it in GitHub Desktop.
Mocking await calls in python 3.5 is a problem
async def some_coroutine():
await async.sleep(10.0)
await another_coroutine()
return 'test'
async def another_coroutine():
pass
from unittest import TestCase, mock, main
import asyncio
from problem import some_coroutine
class AsyncMock(mock.MagicMock):
async def __call__(self, *args, **kwargs):
return super(AsyncMock, self).__call__(*args, **kwargs)
class Test(TestCase):
def setUp(self):
self.loop = asyncio.new_event_loop()
asyncio.set_event_loop(self.loop)
@mock.patch('problem.asyncio.sleep', new_callable=AsyncMock)
@mock.patch('problem.another_coroutine', new_callable=AsyncMock)
def test_some_coroutine(self, mock_another_coroutine, sleep):
async def run_test():
resp = await some_coroutine()
mock_another_coroutine.assert_called_with()
sleep.assert_called_with(10.0)
self.assertEqual(resp, 'test')
self.loop.run_until_complete(run_test())
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment