开发者社区> 问答> 正文

使用Python模拟框架进行模拟时出现TypeError

我正在尝试使用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)
>>>

展开
收起
祖安文状元 2020-02-21 17:55:21 638 0
1 条回答
写回答
取消 提交回答
  • 就像@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'
    
    2020-02-21 17:55:30
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载