(Следующий код можно запустить в 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