簡體   English   中英

如何測試使用裝飾器 cache.memoize 的函數

[英]How to test a function that uses a decorator cache.memoize

我在測試具有緩存裝飾器的函數時遇到問題:

@retry(stop=stop_after_attempt(3))
@cache.memoize(60)
def get_azure_machine_info(rg_name, machine_name, expand="instanceView"):

    try:
        compute_client = get_azure_compute_client()
        return compute_client.virtual_machines.get(rg_name, machine_name, expand=expand)
    except CloudError:
        return None

我的測試:

@patch("dev_maintenance.machines.get_azure_compute_client")
def test_get_azure_machine_info(get_azure_compute_client):
    cache.delete_memoized('get_azure_machine_info')
    with app.app_context():
        ret = get_azure_machine_info("rg1", "m1")
        get_azure_compute_client.assert_called_once()
        assert len(get_azure_compute_client.return_value.method_calls) == 1
        assert (
            ret == get_azure_compute_client.return_value.virtual_machines.get.return_value
            )
        get_azure_compute_client.return_value.virtual_machines.get.assert_called_once_with(
            "rg1", "m1", expand="instanceView"
        )

在我使用緩存之前,測試工作正常,但現在我無法弄清楚這里發生了什么。

錯誤:

在此處輸入圖片說明

cache正在嘗試使用patch創建的 MagicMock 對象來完成它的工作。 它失敗了,因為它“不能腌制類 unitest.mock.MagicMock”

最簡單的解決方法是在測試中模擬cache模塊。 您可以在此處查看指針: 我可以在 Python 裝飾器包裝函數之前對其進行修補嗎?

setUp()夾具中執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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