如何验证 Python 方法是使用包含数据帧的参数调用的?
How can I verify a Python method was called with parameters including a DataFrames?
我正在使用 MagicMock 验证是否使用特定参数调用了方法:
ClassToMock.method_to_mock = MagicMock(name='method_to_mock')
ClassToMock.method_that_creates_data_frame_and_passes_to_mocking_method()
ClassToMock.method_to_mock.assert_called_with('test_parameter_value', self.get_test_data_frame())
其中 self.get_test_data_frame()
是预定义的 DataFrame,它是调用的预期结果。
当我打印出传递给模拟方法的 DataFrame 和测试 DataFrame 时,我可以看到它们在打印时看起来相等:
但测试输出认为它们不相等:
File "C:\python3.6\lib\unittest\mock.py", line 812, in
assert_called_with
if expected != actual: File "C:\python3.6\lib\unittest\mock.py", line 2055, in eq
return (other_args, other_kwargs) == (self_args, self_kwargs) File "C:\python3.6\lib\site-packages\pandas\core\generic.py", line
1330, in nonzero
f"The truth value of a {type(self).name} is ambiguous. " ValueError: The truth value of a DataFrame is ambiguous. Use a.empty,
a.bool(), a.item(), a.any() or a.all().
从阅读其他问题来看,我认为这是因为 MagicMock 试图调用 == 但 Pandas 需要 .equals() 来检查是否相等。有人知道替代方法吗?
所以我做了更多的挖掘,发现 call_args 它捕获了所有传递的参数。
对我更有用的是 call_args_list,因为我的方法可以多次调用。
call_args_list
提供了所有以元组形式进行的调用。
在我的示例中,我使用以下内容捕获了 call_args_list
:
call_list = ClassToMock.method_to_mock.call_args_list
然后我解压元组以获取 DataFrame 并能够使用 .equals() 方法检查相等性。
我正在使用 MagicMock 验证是否使用特定参数调用了方法:
ClassToMock.method_to_mock = MagicMock(name='method_to_mock')
ClassToMock.method_that_creates_data_frame_and_passes_to_mocking_method()
ClassToMock.method_to_mock.assert_called_with('test_parameter_value', self.get_test_data_frame())
其中 self.get_test_data_frame()
是预定义的 DataFrame,它是调用的预期结果。
当我打印出传递给模拟方法的 DataFrame 和测试 DataFrame 时,我可以看到它们在打印时看起来相等:
但测试输出认为它们不相等:
File "C:\python3.6\lib\unittest\mock.py", line 812, in assert_called_with if expected != actual: File "C:\python3.6\lib\unittest\mock.py", line 2055, in eq return (other_args, other_kwargs) == (self_args, self_kwargs) File "C:\python3.6\lib\site-packages\pandas\core\generic.py", line 1330, in nonzero f"The truth value of a {type(self).name} is ambiguous. " ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
从阅读其他问题来看,我认为这是因为 MagicMock 试图调用 == 但 Pandas 需要 .equals() 来检查是否相等。有人知道替代方法吗?
所以我做了更多的挖掘,发现 call_args 它捕获了所有传递的参数。
对我更有用的是 call_args_list,因为我的方法可以多次调用。
call_args_list
提供了所有以元组形式进行的调用。
在我的示例中,我使用以下内容捕获了 call_args_list
:
call_list = ClassToMock.method_to_mock.call_args_list
然后我解压元组以获取 DataFrame 并能够使用 .equals() 方法检查相等性。