数据框的模拟结果适用

时间:2019-02-21 16:14:50

标签: python pandas unit-testing

我正在尝试模拟在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函数

1 个答案:

答案 0 :(得分:1)

模拟模块的正确用法如下:

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

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

希望这会有所帮助!