Який найкращий спосіб написати модульні тести для коду за допомогою 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.