模拟导入模块时调用的函数

Cpp菜鸟

我想测试一个A使用带有参数装饰器的模块A加载模块时会评估参数对于某些装饰器args,我通过foo在module中调用一个函数设置值B

# A.py
import B

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

当我要测试时A,我想进行模拟,B.foo以便为我的测试用例设置decorator参数。我认为B.foo必须在A加载之前嘲笑它B

在单元测试中,作为的调用者AB.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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章