Який найкращий спосіб написати модульні тести для коду за допомогою asyncio
бібліотеки Python 3.4 ? Припустимо, я хочу протестувати 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
.