如何测试 Python 3.4 asyncio 代码?

新手上路,请多包涵

使用 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 指令,之后它在执行任何断言之前返回。这会导致测试始终成功。

是否有能够处理这样的异步代码的预构建测试运行器?

原文由 Marvin Killing 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 747
1 个回答

由于 Python 3.8 unittest 带有 IsolatedAsyncioTestCase 函数,专为此目的而设计。

 from unittest import IsolatedAsyncioTestCase

class Test(IsolatedAsyncioTestCase):

    async def test_functionality(self):
        result = await functionality()
        self.assertEqual(expected, result)

原文由 Nico Rikken 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题