![](/img/trans.png)
[英]How to mock a function, that is imported within an imported method from different module
[英]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.