Как имитировать асинхронный метод экземпляра исправленного класса?Python

Программы на Python
Anonymous
Как имитировать асинхронный метод экземпляра исправленного класса?

Сообщение Anonymous »

(Следующий код можно запустить в Jupyter.)
У меня есть класс B, который использует класс A, и его необходимо протестировать.
class A:
async def f(self):
pass

class B:
async def f(self):
a = A()
x = await a.f() # need to be patched/mocked

И у меня есть следующий тестовый код. Кажется, он издевался над методом класса A вместо метода экземпляра.
from asyncio import Future
from unittest.mock import MagicMock, Mock, patch

async def test():
sut = B()
with patch('__main__.A') as a: # it's __main__ in Jupyter
future = Future()
future.set_result('result')
a.f = MagicMock(return_value=future)
await sut.f()

await test()

Однако в коде возникла ошибка:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
C:\Users\X~1\AppData\Local\Temp\1/ipykernel_36576/3227724090.py in
20 await sut.f()
21
---> 22 await test()

C:\Users\X~1\AppData\Local\Temp\1/ipykernel_36576/3227724090.py in test()
18 future.set_result('result')
19 a.f = MagicMock(return_value=future)
---> 20 await sut.f()
21
22 await test()

C:\Users\X~1\AppData\Local\Temp\1/ipykernel_36576/3227724090.py in f(self)
6 async def f(self):
7 a = A()
----> 8 x = await a.f() # need to be patched/mocked
9
10 from asyncio import Future

TypeError: object MagicMock can't be used in 'await' expression


Подробнее здесь: https://stackoverflow.com/questions/709 ... ched-class

Вернуться в «Python»