首页 > 解决方案 > Python Kafka 模拟 Kafka Consumer 的返回类型

问题描述

我想在使用kafka-python包时测试脚本。我想测试函数的返回对象类型

def _get_kafka_consumer() -> KafkaConsumer:
    consumer = KafkaConsumer(bootstrap_servers=_KAFKA_BOOTSTRAP_SERVICE,
                             auto_offset_reset='earliest')
    consumer.subscribe([_KAFKA_TOPIC_INPUT])
    return consumer

我的测试课看起来像

class TestVoiceToText(unittest.TestCase):

    def test_get_kafka_consumer_output_type(self):
        result = _get_kafka_consumer()
        self.assertIsInstance(result, KafkaConsumer)

当然它没有通过,因为没有运行 Kafka 集群,因此KafkaConsumer无法创建。我如何模拟返回的KafkaConsumer(...)类型KafkaConsumer而不实际需要调用实际的构造函数?

标签: pythonunit-testingapache-kafkamocking

解决方案


我设法通过使用包中的patch函数解决了这个问题unittest.mock

    def test_get_kafka_consumer_output_type(self):
        with patch('voice_to_text.kafka_connector.KafkaConsumer') as kafka_consumer_class_mock:
            kafka_consumer_instance = _get_kafka_consumer()
            kafka_consumer_class_mock_instance = kafka_consumer_class_mock.return_value

            kafka_consumer_class_mock.assert_called_once()
            self.assertEquals(kafka_consumer_class_mock_instance, kafka_consumer_instance)

它只检查结果_get_kafka_consumer()是否实际上是调用函数返回的对象KafkaConsumer()。我们不在乎这个函数实际上在做什么。


推荐阅读