【发布时间】:2018-01-11 00:43:20
【问题描述】:
我需要每秒调用一个任务(比如说)来轮询某个硬件上的一些传感器数据。在单元测试中,我要做的就是检查是否调用了正确的方法以及是否捕获了错误(例如传感器已炸毁或消失)。
这是一个模仿真实代码的玩具示例:
import pytest
import asyncio
import mock
async def ook(func):
while True:
await asyncio.sleep(1)
func()
@pytest.mark.asyncio
async def test_ook():
func = mock.Mock()
await ook(func)
assert func.called is True
正如预期的那样,运行它会永远阻塞。
如何取消ook任务,让单元测试不阻塞?
解决方法是将循环拆分为另一个函数并将其定义为不可测试。我想避免这样做。另请注意,弄乱func(调用loop.close() 或类似的东西)也不起作用,因为它在那里只是玩具示例测试可以断言一些东西。
【问题讨论】:
标签: python python-3.x pytest python-asyncio