python - 如何验证 Python 方法是否使用包括 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())
Whereself.get_test_data_frame()
是一个预定义的 DataFrame,它是调用的预期结果。
当我打印出传递给模拟方法的 DataFrame 和测试 DataFrame 时,我可以看到它们在打印时看起来相等:
但测试输出认为它们不相等:
文件“C:\python3.6\lib\unittest\mock.py”,第 812 行,在 assert_call_with 中如果预期!= 实际:文件“C:\python3.6\lib\unittest\mock.py”,第 2055 行,在eq 返回 (other_args, other_kwargs) == (self_args, self_kwargs) 文件“C:\python3.6\lib\site-packages\pandas\core\generic.py”,第 1330 行,在非零 f“的真值a {type(self) .name } is ambiguous." ValueError: DataFrame 的真值是不明确的。使用 a.empty、a.bool()、a.item()、a.any() 或 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() 方法检查相等性。
推荐阅读
- python - 如何修复弹性搜索中的“KeyError:'*'”
- c# - 关于在我的设计中是否有继承的困惑
- java - 读取 Java/Spring 中的属性值
- java - Bean 名称“bookDto”的 BindingResult 和普通目标对象都不能用作请求属性
- reactjs - 如何在 redux observable 史诗中为 ajax 响应发出两个动作
- c# - C# Form Application Process.Start() Gives Access is denied 错误
- kubernetes-helm - 水平 Pod 自动缩放配置重置
- javascript - 如何解决 React 中的意外令牌 (<) 错误?
- json - 使用 pyspark 将平面数据帧写入数据块中的 json 时维护列顺序
- python-3.x - 将数据插入数据库的简单 Flask 应用程序在本地工作,但在部署时无法工作