gpt4 book ai didi

python-3.x - Python调用模拟 "="未调用结果

转载 作者:行者123 更新时间:2023-12-04 16:45:52 25 4
gpt4 key购买 nike

我正在尝试模拟以下调用:

df_x = method() # returns a pandas dataframe
df_x.loc[df_x['atr'] < 0, 'atr'] = 0

我已经模拟了该方法,因此它返回一个 MagicMock 并将默认值设置为 MagicMock 的 __ getitem__ 属性,如下所示:
mock_df_x = mock_method.return_value
mock_df_x.__getitem__.return_value = 0

问题是当我尝试断言调用时:
mock_df_x.loc.__getitem__.assert_called_with(False, 'atr')

我得到一个未被称为错误的函数。如果我在没有“= 0”部分的情况下调用这样的函数,则断言有效。
df_x.loc[df_x['atr'] < 0, 'atr']

最佳答案

您看到这种不同行为的原因取决于您是否拥有 = 0在通话结束时,您正在测试的是 Python's data model ,这些对应于两种不同的魔法方法: __getitem__ __setitem__ .

这是有道理的,因为例如做 some_dictionary['nonexistent_key]'加薪 KeyError , 而 some_dictionary['nonexistent_key]' = 1没有,并按预期设置值。

现在,为了修复您的测试,您只需要将断言从:

mock_df_x.loc.__getitem__.assert_called_with((False, 'atr'))

仅当您访问 key 时才有效:
mock_df_x.loc.__setitem__.assert_called_with((False, 'atr'), 0)

如果您尝试为该键分配一个值,这会起作用。
还要注意额外的参数,对应于您实际尝试分配的值。

关于python-3.x - Python调用模拟 "="未调用结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55141947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com