【问题标题】: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


【解决方案1】:
@patch('loader.utils.run_raise_exception_if_fail')
@patch('time.time', return_value=123)

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

对于您正在编写单元测试的任何函数,如果在主函数中调用了一些 2 个内部函数并且您想要修补它。添加具有相应返回值的 2 个补丁装饰器。在主测试函数“a,b”中添加与使用的补丁装饰器数量相对应的变量。

请试试这个。

应该解决给定参数数量不正确的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    相关资源
    最近更新 更多