Wie kann ich verspotte Teil eines python-Konstruktor nur zum testen?

Ich bin neu in Python, so dass ich entschuldige mich, wenn dies ist ein Duplikat oder sehr einfache Frage. Ich habe geschrieben eine Koordinator-Klasse, ruft zwei andere Klassen mit dem kafka-python-Bibliothek zum senden/Lesen von Daten von Kafka. Ich möchte schreiben Sie einen unit test für mein Koordinator Klasse aber ich habe Schwierigkeiten, herauszufinden, wie am besten, um darüber zu gehen. Ich hatte gehofft, ich könnte einen alternativen Konstruktor, konnte ich mein verspottet Objekte, aber dies scheint nicht zu funktionieren, da bekomme ich eine Fehlermeldung, dass test_mycoordinator nicht gelöst werden kann. Ich bin dabei zum testen dieser Klasse das der falsche Weg? Gibt es eine pythonic way, ich sollte testen?

Hier ist, was meine Testklasse sieht so weit:

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)

Und hier ist die Klasse, die ich bin versucht zu testen:

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
wher edoes mycordinator kommen aus in Ihrem setUpModule?
sorry, ich hatte einen Tippfehler, wenn ich die änderung der Namen habe ich editiert, die Frage zu lösen, die import-Anweisung

InformationsquelleAutor jencoston | 2017-04-11

Schreibe einen Kommentar