Je suis nouveau sur Python, alors je m'excuse si c'est une question en double ou trop simple. J'ai écrit une classe de coordinateur qui appelle deux autres classes qui utilisent la bibliothèque kafka-python pour envoyer/lire des données de Kafka. Je veux passer un test d'unité pour mon cours de coordinateur, mais j'ai de la difficulté à trouver la meilleure façon d'y parvenir. J'espérais que je pourrais faire un constructeur alternatif que je pourrais passer mes objets raillés, mais cela ne semble pas fonctionner car j'obtiens une erreur que test_mycoordinator ne peut pas être résolu. Est-ce que je vais tester cette classe dans le mauvais sens? Y a-t-il une façon pythonique de le tester?Comment se moquer d'une partie d'un constructeur python juste pour tester?
Voici ce que ma classe de test ressemble jusqu'à présent:
import unittest
from mock import Mock
from mypackage import mycoordinator
class MyTest(unittest.TestCase):
def setUpModule(self):
# Create a mock producer
producer_attributes = ['__init__', 'run', 'stop']
mock_producer = Mock(name='Producer', spec=producer_attributes)
# Create a mock consumer
consumer_attributes = ['__init__', 'run', 'stop']
data_out = [{u'dataObjectID': u'test1'},
{u'dataObjectID': u'test2'},
{u'dataObjectID': u'test3'}]
mock_consumer = Mock(
name='Consumer', spec=consumer_attributes, return_value=data_out)
self.coor = mycoordinator.test_mycoordinator(mock_producer, mock_consumer)
def test_send_data(self):
# Create some data and send it to the producer
count = 0
while count < 3:
count += 1
testName = 'test' + str(count)
self.coor.sendData(testName , None)
Et voici la classe que je suis en train de tester:
class MyCoordinator():
def __init__(self):
# Process Command Line Arguments using argparse
...
# Initialize the producer and the consumer
self.myproducer = producer.Producer(self.servers,
self.producer_topic_name)
self.myconsumer = consumer.Consumer(self.servers,
self.consumer_topic_name)
# Constructor used for testing -- DOES NOT WORK
@classmethod
def test_mycoordinator(cls, mock_producer, mock_consumer):
cls.myproducer = mock_producer
cls.myconsumer = mock_consumer
# Send the data to the producer
def sendData(self, data, key):
self.myproducer.run(data, key)
# Receive data from the consumer
def getData(self):
data = self.myconsumer.run()
return data
d'où viennent les 'mycordinator' dans votre' setUpModule'? – dm03514
@ dm03514 désolé, j'ai eu une faute de frappe quand je changeais les noms que j'ai édité la question pour corriger la déclaration d'importation – jencoston