作者:我并没有你们想象P的坚强 | 来源:互联网 | 2022-12-10 12:58
当我尝试使用MagicMock模拟单元测试中的异步函数时,出现了以下异常:
TypeError:对象MagicMock不能在'await'表达式中使用
带有如下示例代码:
# source code
class Service:
async def compute(self, x):
return x
class App:
def __init__(self):
self.service = Service()
async def handle(self, x):
return await self.service.compute(x)
# test code
import asyncio
import unittest
from unittest.mock import patch
class TestApp(unittest.TestCase):
@patch('__main__.Service')
def test_handle(self, mock):
loop = asyncio.get_event_loop()
app = App()
res = loop.run_until_complete(app.handle('foo'))
app.service.compute.assert_called_with("foo")
if __name__ == '__main__':
unittest.main()
我应该如何使用内置的python3库修复它?
1> shaun shia..:
我最终遇到了这种骇客。
# monkey patch MagicMock
async def async_magic():
pass
MagicMock.__await__ = lambda x: async_magic().__await__()
它仅适用于MagicMock,不适用于其他预定义的return_value