Я новичок в Python, поэтому прошу прощения, если это дубликат или слишком простой вопрос. Я написал класс-координатор, который вызывает два других класса, использующих библиотеку kafka-python для отправки/чтения данных из Kafka. Я хочу написать модульный тест для своего класса координатора, но мне трудно понять, как лучше всего это сделать. Я надеялся, что смогу создать альтернативный конструктор, в который я мог бы передать свои издевательские объекты, но, похоже, это не работает, поскольку я получаю сообщение об ошибке, что test_mycoordinator не может быть разрешен. Я собираюсь протестировать этот класс неправильно? Есть ли питонический способ, которым я должен его протестировать?
Вот как выглядит мой тестовый класс:
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)
И вот класс, который я пытаюсь протестировать:
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
setUpModule
беретсяmycordinator
? - person dm03514   schedule 11.04.2017