2016-07-14 1 views
0

J'essaie de tester ma réponse de messagerie dans une de mes bibliothèques.Test des sockets zmq avec 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) 

Mon problème est que lorsque je déclare les méthodes d'essai dans la classe ci-dessus, au lieu d'appeler la fonction setUp une fois mise une fois l'état, chaque méthode d'essai tente rappelle setUp pour définir son propre état et l'adresse ont déjà été accroché par la première instance. Comment puis-je contourner les problèmes multi-processus avec la façon dont fonctionne unittest? Serait-il préférable d'appeler un socket aléatoire à des fins de test?

+1

Si vous ne voulez l'appeler qu'une seule fois, placez-le dans le constructeur sinon le but de setUp est de s'exécuter avant chaque test. – Dan

+0

Haha, ça a beaucoup plus de sens. Mais les tests seront encore en cours, correct? –

+0

Oui, ils fonctionneront toujours en parallèle. – Dan

Répondre

0

Vous devez effectuer la création de socket zermq dans le constructeur de classe __init__(self), qui sera appelée une seule fois. setUp() est destiné aux choses qui devraient être faites avant chaque test.