2016-07-14 13 views
0

Ich versuche, meine Messaging-Antwort in einer meiner Bibliotheken zu testen.Testing ZMQ Steckdosen mit Unittest

import unittest 
from time import sleep 

import zmq 
from vexbot.messaging import Messaging 


class TestMessaging(unittest.TestCase): 
    def setUp(self): 
     self.subscribe_address = 'tcp://127.0.0.1:4006' 
     self.publish_address = 'tcp://127.0.0.1:4007' 
     self.settings = {'subscribe_address': self.subscribe_address, 
         'publish_address': self.publish_address} 

     context = zmq.Context() 
     self.messaging = Messaging(self.settings, context) 

     self.test_publish_socket = context.socket(zmq.PUB) 
     self.test_publish_socket.connect(self.publish_address) 

     self.test_subscribe_socket = context.socket(zmq.SUB) 
     self.test_subscribe_socket.connect(self.subscribe_address) 
     self.test_subscribe_socket.setsockopt_string(zmq.SUBSCRIBE, '') 
     sleep(1) 

Mein Problem ist, dass, wenn ich Testverfahren in der obigen Klasse deklarieren, anstatt die setUp Funktion einmal aufrufen und den Zustand einmal einstellen, versucht jeder Testmethode erinnert setUp seinen eigenen Zustand zu setzen und die Adresse bereits wurde von der ersten Instanz geschnappt.

Wie erhalte ich rund um die Multi-Prozess-Probleme mit der Art und Weise unittest arbeitet? Wäre es besser, zu Testzwecken eine zufällige Buchse aufzurufen?

+1

Wenn Sie wollen, dass es nur einmal nannte es dann im Konstruktor setzt sonst der Zweck der setUp ist vor jedem Test auszuführen. – Dan

+0

Haha, das macht viel mehr Sinn. Aber die Tests werden immer noch gleichzeitig ausgeführt, richtig? –

+0

Ja, sie werden immer parallel laufen. – Dan

Antwort

0

Sie sollten die zermq Socketerstellung im Konstruktor der Klasse __init__(self) durchführen, die einmal aufgerufen werden. setUp() ist für Dinge gedacht, die vor jedem Test durchgeführt werden sollten.