我正在尝试模拟在dataframe.apply(function)中调用的函数的结果,请参见下面的代码:
def simple_zero(value):
a = value
return a-value
def difficult_zero(value):
a = np.zeros(value.shape, dtype=int)
return a
@mock.patch('difficult_zero', side_effect='simple_zero')
def test_mock_df_apply():
df = pd.DataFrame([[4, 9],] * 3, columns=['A', 'B'])
df = df.apply(difficult_zero)
print(df)
assert 0
运行此测试会导致“ TypeError:需要修补有效目标。您提供了:'difficult_zero'”。我已经尝试了补丁side_effect='simple_zero'
和补丁return_value=pd.DataFrame([[0, 0],] * 3, columns=['A', 'B'])
。
预期输出为
A B
0 0 0
1 0 0
2 0 0
如何模拟数据框的结果适用?
编辑:固定了simple_zero函数
答案 0 :(得分:1)
模拟模块的正确用法如下:
@mock.patch(__name__+'.difficult_zero', new=simple_zero)
目标'__name__+'.difficult_zero'
是代表函数定义的字符串。由于模拟对当前的运行时范围一无所知,因此我们应将其与函数名称一起传递。在这种情况下,它可以是__name__
。使用另一个函数的参数不是side_effect='function'
,而是new=function
。它可能已更改,但我不确定!
希望这会有所帮助!