我试着想一下如何在helper.py中模拟一个函数,该函数在多个方法中用于单元测试。
我尝试使用补丁,@ patch('project.helpers.function_0',new = lambda:True)但是没有用。
这样做的正确方法是什么?
谢谢。
我有1个函数和1个装饰器,我需要覆盖所有测试集。
helpers.py
def myfunction(asd):
# ...
return asd
decorators.py
def mydecorator(func):
@wraps(func)
def _wrapped_func(asd, *args, **kwargs):
# ...
return func(asd, *args, **kwargs)
return _wrapped_func
我想知道如何使用模拟,谢谢!
test_base.py
import project.decorators
import project.helpers
def myfunction_mock(asd):
# ...
return asd
helpers.myfunction = myfunction_mock
def mydecorator_mock(func):
# ...
decorators.mydecorator = mydecorator_mock
答案 0 :(得分:0)
这里有一些关键的事情。
$ flutter packages get
(或通过unittest.mock
安装mock
)。pip
时,您可能希望使用mock.patch
关键字参数,而不是new_callable
假设您的生产代码看起来像这样......
new
如果您想从生产代码中测试#production_module.py
from helpers import myfunction
def some_function(a):
result = myfunction(a) + 1
return result
,请模拟some_function
您的测试代码应修补myfunction
而不是production_module.myfunction
因此,您的测试代码可能如下所示
helpers.myfunction
使用import mock
from production_module import some_function
def mock_myfunction(*args, **kwargs):
return 1
@mock.patch('production_module.myfunction', new_callable=mock_myfunction)
def test_some_function(mock_func):
result = some_function(1) # call the production function
assert mock_func.called # make sure the mock was actually used
assert result == 2
的另一种方式是作为上下文管理器。所以补丁只适用于那种情况。
mock.patch