bpo-39915: Ensure await_args_list is updated according to the order in which coroutines were awaited (GH-18924)

Create call objects with awaited arguments instead of using call_args which has only last call value.
This commit is contained in:
Karthikeyan Singaravelan 2020-03-11 20:36:12 +05:30 committed by GitHub
parent fde44ae6d0
commit e553f204bf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 1 deletions

View File

@ -2171,7 +2171,7 @@ class AsyncMockMixin(Base):
# This is nearly just like super(), except for special handling # This is nearly just like super(), except for special handling
# of coroutines # of coroutines
_call = self.call_args _call = _Call((args, kwargs), two=True)
self.await_count += 1 self.await_count += 1
self.await_args = _call self.await_args = _call
self.await_args_list.append(_call) self.await_args_list.append(_call)

View File

@ -500,6 +500,17 @@ class AsyncArguments(IsolatedAsyncioTestCase):
mock.assert_awaited() mock.assert_awaited()
self.assertTrue(ran) self.assertTrue(ran)
async def test_await_args_list_order(self):
async_mock = AsyncMock()
mock2 = async_mock(2)
mock1 = async_mock(1)
await mock1
await mock2
async_mock.assert_has_awaits([call(1), call(2)])
self.assertEqual(async_mock.await_args_list, [call(1), call(2)])
self.assertEqual(async_mock.call_args_list, [call(2), call(1)])
class AsyncMagicMethods(unittest.TestCase): class AsyncMagicMethods(unittest.TestCase):
def test_async_magic_methods_return_async_mocks(self): def test_async_magic_methods_return_async_mocks(self):
m_mock = MagicMock() m_mock = MagicMock()

View File

@ -0,0 +1,4 @@
Ensure :attr:`unittest.mock.AsyncMock.await_args_list` has call objects in
the order of awaited arguments instead of using
:attr:`unittest.mock.Mock.call_args` which has the last value of the call.
Patch by Karthikeyan Singaravelan.