如何为使用 Python 3.4 的 asyncio
库编写单元测试?假设我想测试一个 TCP 客户端(SocketConnection
):
import asyncio
import unittest
class TestSocketConnection(unittest.TestCase):
def setUp(self):
self.mock_server = MockServer("localhost", 1337)
self.socket_connection = SocketConnection("localhost", 1337)
@asyncio.coroutine
def test_sends_handshake_after_connect(self):
yield from self.socket_connection.connect()
self.assertTrue(self.mock_server.received_handshake())
使用默认测试运行程序运行此测试用例时,测试将始终成功,因为该方法仅在第一个yield from
指令执行之前执行,之后返回而未执行任何断言。这导致测试始终成功。
是否有预构建的测试运行程序可以处理此类异步代码?
loop.run_until_complete()
代替yield from
。另请参阅asyncio.test_utils
。 - jfsasync def
和await
语法,请参见:https://dev59.com/Ep3ha4cB1Zd3GeqPV4zx - Udi