[英]Mock a connection class in pytest
我有一個繼承自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來運行測試?
好的, 文檔陳述如下:
patch()通過(臨時)更改名稱指向的對象與另一個對象。 可以有許多名稱指向任何單個對象,因此要進行修補工作,必須確保修補被測系統使用的名稱。
基本原則是修改查找對象的位置,該位置不一定與定義對象的位置相同。 幾個例子將有助於澄清這一點。
因此,解決方案:
@patch('aggregator.aggregator.Connection')
def test_on_request(mock_connect):
agg = Aggregator('localhost')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.