如何使用'asyncio.sleep()`包含代码进行单位测试? 我有一个问题来编写Asyncio.sleep包含单位测试。我会等待实际的睡眠时间...吗? 我用Freezegun嘲笑时间。 当我尝试使用普通测试进行测试时,这个库真的很有帮助。

问题描述 投票:0回答:1
async def too_many_sleep(delay): await asyncio.sleep(delay) do_something() def test_code(): task = event_loop.create_task(too_many_sleep(10000)) # I want test like `assert_called(do_something)` without realtime delays

我想要什么:

def test_code():
    task = event_loop.create_task(too_many_sleep(10000))

    ...
    # trick the time
    with time_shift(sec=10000):
        assert task.done()

我在做什么:
def test_code():
    task = event_loop.create_task(too_many_sleep(10000))
    # run tests and I will see a sunrise

no,

freezegun

没有补丁会影响
asyncio.sleep()
,因为
python
1个回答
8
投票
没有修补

ASYNCIO

loop.time()
方法
.
freezegun项目存储库中有一个问题,它询问如何处理
asyncio.sleep()
,但仍没有提出的解决方案开放。
你可以嘲笑自己:

asyncio.sleep()

上面的测试期间,上面用
from unittest import mock class AsyncMock(mock.MagicMock): async def __call__(self, *args, **kwargs): return super(AsyncMock, self).__call__(*args, **kwargs) with mock.patch('asyncio.sleep', new_callable=AsyncMock): task = event_loop.create_task(too_many_sleep(10000)) 实例替换了,
asyncio.sleep
当调用时,什么都不做。

Martijn Pieters的解决方案效果很好。但是,自3.8以来,python的UnitTest库中已经有一个。您可以使用那个:

AsyncMock()

	

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.