AsyncMock协程实际上从不放弃控制?
创始人
2024-09-21 08:00:23
0

这个问题是由于在使用AsyncMock来模拟asyncio协程时,可能会遇到异步函数实际上没有yield控制的情况。这可能在使用AsyncMock的时候导致一些不正确的测试结果。一个解决方法是使用mock.MagicMock对象作为异步函数的替代,这个对象可以模拟异步函数的行为并正确使用yield控制。下面是一个示例:

import asyncio
from unittest import mock

async def my_async_function():
    print("Before yield")
    await asyncio.sleep(1)
    print("After yield")

async def my_test_function():
    await my_async_function()

@mock.patch("mymodule.my_async_function", new_callable=mock.MagicMock)
def test_async_function(mock_async_function):
    mock_async_function.return_value = asyncio.ensure_future(my_test_function())
    loop = asyncio.get_event_loop()
    loop.run_until_complete(my_test_function())

test_async_function()

在这个示例中,我们使用@mock.patch修饰器来替换my_async_function的行为,将其替换成一个mock.MagicMock对象。然后我们将mock_async_function.return_value设置为一个asyncio.ensure_future对象,并将其传递给my_test_function中的await表达式。最后,我们使用asyncio.get_event_loop()来运行my_test_function并测试异步函数的行为。

相关内容

热门资讯

两分钟了解(aapokeR)外... 两分钟了解(aapokeR)外挂透明挂辅助下载(透视)2025新版教程(2026已更新)(哔哩哔哩)...
第三分钟了解(众合推扑克)外挂... 第三分钟了解(众合推扑克)外挂透明挂辅助软件(透视)揭秘教程(2025已更新)(哔哩哔哩);第三分钟...
5分钟了解(菠萝德州app)外... 5分钟了解(菠萝德州app)外挂透明挂辅助安装(透视)透明教程(2026已更新)(哔哩哔哩);5分钟...
一分钟了解(AAPOKEr)软... 一分钟了解(AAPOKEr)软件透明挂辅助软件(透视)wpk教程(2020已更新)(哔哩哔哩);wp...
2分钟了解(德扑手机上)软件透... 2分钟了解(德扑手机上)软件透明挂辅助app(透视)安装教程(2021已更新)(哔哩哔哩);德扑手机...
5分钟了解(德州poker)黑... 5分钟了解(德州poker)黑科技透明挂辅助代打(透视)透明教程(2026已更新)(哔哩哔哩);最新...
第3分钟了解(扑克世界app)... 第3分钟了解(扑克世界app)黑科技透明挂辅助ai(透视)2025新版教程(2026已更新)(哔哩哔...
四分钟了解(WPK控制)外挂透... 四分钟了解(WPK控制)外挂透明挂辅助插件(透视)AI教程(2026已更新)(哔哩哔哩);人气非常高...
第1分钟了解(wepoke德州... 第1分钟了解(wepoke德州扑克)外挂智能ai辅助软件(透视)必赢方法(2022已更新)(哔哩哔哩...
1分钟了解(WPK控制)外挂智... 1分钟了解(WPK控制)外挂智能ai辅助安装(透视)可靠教程(2020已更新)(哔哩哔哩);致您一封...