【问题标题】:python mocking: wrong number of arguments errorpython mocking:错误数量的参数错误
【发布时间】:2023-04-03 07:26:01
【问题描述】:

我正在尝试使用模拟库并基本上修补了一些模块功能。所以,我有一些现有的代码,如下所示:

@patch('loader.utils.run_raise_exception_if_fail')
@patch('time.time', return_value=123)

def test_export_ok(self, _, run_command_mock):
    ....
    calls = run_command_mock.call_args_list
    

这种工作正常,测试被调用并执行。我试图了解这些函数参数的含义以及它们的生成位置。我以前从未使用过模拟功能。

现在,我正在尝试模拟另一个函数,并添加了以下补丁装饰器:

@patch('assessment.utils.statistics', return_value={"counts": {'volume': 10, hits=10}})

现在,当我尝试运行这个东西时,我收到以下错误:

TypeError: test_export_ok() takes 2 positional arguments but 4 were given

我对补丁装饰器和实际测试的这些函数参数感到困惑。统计方法的函数签名如下:

def statistics(collisions: np.ndarray,
               obj_size: Union[List, Tuple]):

【问题讨论】:

  • 当您像这样修补某些路径时,该方法会在其参数签名中以相反的顺序接收相应的模拟,您应该相应地进行调整。
  • 错误不在补丁函数签名中,而是在测试方法签名中。
  • 没有。补丁装饰器和编号。函数中除self之外的变量应该是相同的。试试这个然后“test_export_ok() 接受 2 个位置参数,但给出了 4 个”这个错误将得到解决。

标签:
python
mocking
python-unittest