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