【发布时间】:2014-05-26 20:51:37
【问题描述】:
使用 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。 -
对于 python 3.5+
async def和await语法,请参见:stackoverflow.com/questions/41263988/…
标签: python unit-testing python-3.x python-unittest python-asyncio