Python 使用pyserialasyncio进行单元测试

Python 使用pyserialasyncio进行单元测试,python,unit-testing,asynchronous,pyserial,python-asyncio,Python,Unit Testing,Asynchronous,Pyserial,Python Asyncio,我有一个问题,我想弄清楚。基本上,我尝试使用异步连接到串行端口。然而,我想对它进行单元测试,同时也在学习这一切。让我大吃一惊(双关语)的是,当我能让它工作的时候。这似乎创建了一个非常专门的测试,它不适合将异步函数集成到模块中主要是,我似乎不明白如何在模块中实现这一点,然后检查每个函数中的值。 输出类(异步协议) 下面我实现了一个asyncio.Protocol,类似于单元测试pyserial asyncio所需的协议。这在测试中作为导入的对象“faradayOut=faraday.Output”

我有一个问题,我想弄清楚。基本上,我尝试使用异步连接到串行端口。然而,我想对它进行单元测试,同时也在学习这一切。让我大吃一惊(双关语)的是,当我能让它工作的时候。这似乎创建了一个非常专门的测试,它不适合将异步函数集成到模块中主要是,我似乎不明白如何在模块中实现这一点,然后检查每个函数中的值。

输出类(异步协议) 下面我实现了一个asyncio.Protocol,类似于单元测试pyserial asyncio所需的协议。这在测试中作为导入的对象“faradayOut=faraday.Output”实现

这在以下测试中使用:

import os
import unittest
import asyncio

import serial_asyncio

HOST = '127.0.0.1'
_PORT = 8888
应在哪个端口上执行测试:

PORT = 'socket://%s:%s' % (HOST, _PORT)

@unittest.skipIf(os.name != 'posix', "asyncio not supported on platform")
class Test_asyncio(unittest.TestCase):
    """Test asyncio related functionality"""

    def setUp(self):
        self.loop = asyncio.get_event_loop()
        # create a closed serial port

    def tearDown(self):
        self.loop.close()

    def test_asyncio(self):
        faradayIn = faraday.Input
        faradayOut = faraday.Output
        if PORT.startswith('socket://'):
            coro = self.loop.create_server(faradayIn, HOST, _PORT)
            self.loop.run_until_complete(coro)

        client = serial_asyncio.create_serial_connection(self.loop, faradayOut, PORT)
        self.loop.run_until_complete(asyncio.gather(client))
        # print("TEST = {0}".format(test))
        self.loop.run_forever()
        # self.assertEqual(b''.join(client.received), faraday.Output.TEXT)
        # self.assertEqual(actions, ['open', 'close'])
这很有效。问题是我无法对照faraday.Output.text检查client.received文本。这是因为一旦aysncio循环完成,协程似乎就被破坏了,实例self.received列表也随之被破坏

如何使用预期的实现对其进行单元测试

PORT = 'socket://%s:%s' % (HOST, _PORT)

@unittest.skipIf(os.name != 'posix', "asyncio not supported on platform")
class Test_asyncio(unittest.TestCase):
    """Test asyncio related functionality"""

    def setUp(self):
        self.loop = asyncio.get_event_loop()
        # create a closed serial port

    def tearDown(self):
        self.loop.close()

    def test_asyncio(self):
        faradayIn = faraday.Input
        faradayOut = faraday.Output
        if PORT.startswith('socket://'):
            coro = self.loop.create_server(faradayIn, HOST, _PORT)
            self.loop.run_until_complete(coro)

        client = serial_asyncio.create_serial_connection(self.loop, faradayOut, PORT)
        self.loop.run_until_complete(asyncio.gather(client))
        # print("TEST = {0}".format(test))
        self.loop.run_forever()
        # self.assertEqual(b''.join(client.received), faraday.Output.TEXT)
        # self.assertEqual(actions, ['open', 'close'])