python - 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
而不实际需要调用实际的构造函数?
解决方案
我设法通过使用包中的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()
。我们不在乎这个函数实际上在做什么。
推荐阅读
- python-3.x - 为什么列表切片上的循环比 range() 快?
- html - API Setu 不适用于某些 API,例如 PAN 和 GSTIN 验证
- html - 创建xml时保留数据格式
- prestashop - 如何防止外部 Prestashop 模块访问某些数据
- c# - DI NSwag 自动生成客户端的正确方法
- wordpress - 我无法访问 wp-admin。我正在使用 NGINX Ubuntu
- css - 是否有基于 CSS 自定义属性创建可主题化组件变体的最佳实践?
- r - 我无法在 R 版本 4.1.1 中从 CRAN 安装 R 包“肽”
- python - 创建一个类型化的装饰器作为类方法并在另一个文件中导入/使用它
- laravel - 为什么 Laravel `FormRequest` 先授权,最后验证输入?我该如何改变这种行为?可能会出现哪些意想不到的弊端?