我想测试一个A
使用带有参数装饰器的模块。A
加载模块时会评估参数。对于某些装饰器args,我通过foo
在module中调用一个函数来设置值B
。
# A.py
import B
@deco(arg1=B.foo())
def bar():
...
当我要测试时A
,我想进行模拟,B.foo
以便为我的测试用例设置decorator参数。我认为B.foo
必须在A
加载之前嘲笑它B
。
在单元测试中,作为的调用者A
,B.foo
当评估in中的装饰器参数时,如何模拟以确保使用模拟版本A
?
如果您想确保确实使用了该模拟,则必须A
在修补后重新加载模块foo
,就像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):
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句