Was ist der beste Weg, um Unit-Tests für Code mithilfe der Python 3.4- asyncio
Bibliothek zu schreiben ? Angenommen, ich möchte einen TCP-Client testen ( 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())
Wenn Sie diesen Testfall mit dem Standardtestläufer ausführen, ist der Test immer erfolgreich, da die Methode nur bis zur ersten yield from
Anweisung ausgeführt wird. Danach wird sie zurückgegeben, bevor Zusicherungen ausgeführt werden. Dies führt dazu, dass Tests immer erfolgreich sind.
Gibt es einen vorgefertigten Testläufer, der so asynchronen Code verarbeiten kann?
loop.run_until_complete()
anstelle von verwendenyield from
. Siehe auchasyncio.test_utils
.