正如标题所说,我在尝试检查我的测试功能是否装饰了正确的装饰器时,我遇到了一些麻烦,其次是正确的参数。
正在测试的方法
@command_wrapper.command('string1', 'string2')
def function_under_test():
return some_other_function();
单元测试
@patch("command_wrapper.command")
def test_function_under_test(self, mock_command_wrapper)
* Do some testing *
装饰者:command_wrapper.py
def command(string1, string2):
cmd_decorator(func):
@wraps(func)
def func_wrapper():
* Do some code *
return func_wrapper
return cmd_decorator
然而,当测试运行时,它清楚地执行装饰器而没有嘲笑它。我是Python的新手,所以我甚至不确定这是否可行,或者这是否是正确的方法。
答案 0 :(得分:1)
装饰器在模块导入时运行,因此您需要在导入时对其进行修补。您可以通过强制重新加载模块来解决这个问题,解释here,并在未修补后再次恢复它。
e.g:
#python3.4+ only:
from importlib import reload
# python 3.X:
# from imp import reload
# python2 reload is built-in
import module_under_test
def test()
try:
with patch("command_wrapper.command") as mock_wrapper:
# make decorator return function unchanged
mock_wrapper.return_value.side_effect = lambda func: func
reload(module_under_test)
** test stuff **
finally:
reload(module_under_test)
这有点hacky,可能更好地找到另一种测试方法,但我认为它会起作用。