ハードウェアの一部のセンサーデータをポーリングするために毎秒タスクを呼び出す必要があります。単体テストでは、私がやりたいことは、正しいメソッドが呼び出され、エラー(センサーなどが爆発したか消滅したか)が捕捉されているかどうかをチェックすることです。予想通り、これは永遠にブロックされます実行し、asyncioで永遠に実行中のタスクをテストする
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()
などと呼ぶ)をつまむことは、おもちゃの例題テストが何かをアサートすることができるように、そこにあるようにも機能しないことにも注意してください。