首页 > 解决方案 > 数据框的模拟结果适用

问题描述

我正在尝试模拟在 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'”。我已经尝试过 patchside_effect='simple_zero'和 patch return_value=pd.DataFrame([[0, 0],] * 3, columns=['A', 'B'])

预期输出为

   A  B  
0  0  0  
1  0  0    
2  0  0

如何模拟应用数据框的结果?

编辑:固定 simple_zero 功能

标签: pythonpandasunit-testing

解决方案


mock模块的正确用法如下:

@mock.patch(__name__+'.difficult_zero', new=simple_zero)

目标'__name__+'.difficult_zero'是表示函数定义的字符串。由于 mock 对当前运行时范围一无所知,我们应该将它与函数名称一起传递。在这种情况下,这可以__name__。使用另一个函数的参数不是side_effect='function',但它是new=function。它可能已经改变,但我不确定!

希望这可以帮助!


推荐阅读