簡體   English   中英

在pytest中模擬連接類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM