我正在尝试使用python模拟框架模拟类函数时,TypeError正好接受2个参数(给定0)。
>>> class ExampleClass():
... @staticmethod
... def _process_updates(arg1, arg2):
... pass
...
>>>
>>> @patch("ExampleClass._process_updates")
... def process_updates(arg1, arg2):
... return "test"
...
>>> ExampleClass._process_updates()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: _process_updates() takes exactly 2 arguments (0 given)
>>>
就像@DanielRoseman所说的那样,@patch替代了该函数修补所使用的函数(方法)。即在下面的示例中,该函数calling_func_with_mock是的修补版本,calling_func因为我们已经替换process_updates了_process_updates(在本地ExampleClass对象内)。
我认为它们对您来说关键是修补正在使用的 高级功能ExampleClass。高温超导
from unittest.mock import patch
class ExampleClass():
@staticmethod
def _process_updates(arg1, arg2):
return arg1
def patched_process_updates(arg1, arg2):
return arg2
def calling_func():
"""Uses normal ExampleClass._process_updates"""
print( ExampleClass._process_updates('Hello','world') )
@patch('__main__.ExampleClass._process_updates', new=patched_process_updates)
def calling_func_with_mock():
"""Uses ExampleClass._process_updates patch"""
print( ExampleClass._process_updates('Hello','world') )
if __name__=='__main__':
calling_func()
# 'Hello'
calling_func_with_mock()
# 'world'
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。