我有一个继承自kombu.ConsumerProducerMixin
的类,我想在没有运行实际rabbitmq服务的情况下测试它。
class Aggregator(ConsumerProducerMixin):
def __init__(self, broker_url):
exchange_name = 'chargers'
self.status = 0
self.connection = Connection(broker_url)
...
在我的测试文件中,我执行了以下操作:
from unittest.mock import Mock, patch
from aggregator import Aggregator
@patch('kombu.connection.Connection')
def test_on_request(conn_mock):
agg = Aggregator('localhost')
m = Message("", {"action": "start"}, content_type="application/json")
使用调试器进入Aggregator.__init__
,我发现connection
仍未修补为Mock
个实例:
(Pdb) self.connection
<Connection: amqp://guest:**@localhost:5672// at 0x7fc8b7f636d8>
(Pdb) Connection
<class 'kombu.connection.Connection'>
我的问题是如何正确修补连接,以便我不需要rabbitmq来运行测试?
答案 0 :(得分:2)
好的,docs说明以下内容:
patch()通过(临时)更改名称所指向的对象来工作 与另一个人。可以有许多名称指向任何名称 个别对象,所以为了修补工作,你必须确保你 修补被测系统使用的名称。
基本原则是你修剪一个对象的位置, 它不一定与定义的地方相同。一个 几个例子将有助于澄清这一点。
因此,解决方案:
@patch('aggregator.aggregator.Connection')
def test_on_request(mock_connect):
agg = Aggregator('localhost')