簡體   English   中英

模擬導入模塊時調用的 function

[英]Mock a function which is called when a module is imported

我想測試一個模塊A ,它使用帶有 arguments 的裝飾器。 arguments 在模塊A加載時得到評估。 對於一些裝飾器參數,我通過調用模塊B中的 function foo來設置值。

# A.py
import B

@deco(arg1=B.foo())
def bar():
  ...

當我想測試A時,我想模擬B.foo以便為我的測試用例設置裝飾器參數。 我認為B.foo必須在A加載B之前被嘲笑。

在單元測試中,作為A的調用者,我如何模擬B.foo以確保在評估A中的裝飾器 arguments 時使用模擬版本?

如果要確保真正使用模擬,則必須在修補foo后重新加載模塊A ,因為bar已經使用原始foo進行了評估。 您可以將其包裝在這樣的夾具中(未經測試):

import importlib
import pytest
from unittest import mock
import A

@pytest.fixture
def mocked_foo():
    with mock.patch('B.foo') as mocked:
        importlib.reload(A)
        yield mocked

def test_bar(mocked_foo):
    ...

暫無
暫無

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

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