小编ndc*_*clt的帖子

使用模拟获取应用的函数输入数据框

我有以下功能

def main():
    (
        pd.DataFrame({'a': [1, 2, float('NaN')], 'b': [1.0, 2, 3]})
        .dropna(subset=['a'])
        .assign(
            b=lambda x: x['b'] * 2
        )
        .apply(do_something_with_each_row, axis='columns')
    )

def do_something_with_each_row(one_row):
    # do_something_with_row
    print(one_row)
Run Code Online (Sandbox Code Playgroud)

在我的测试中,我想查看在所有链接操作之后构建的数据框,并在调用do_something_with_each_row. 最后一个函数不返回数据帧(它只是迭代所有行,类似于iterrow)。

我试图apply像这样模拟这个函数:

# need pytest-mock and pytest
import pandas as pd


def test_not_working(mocker):
    mocked_apply = mocker.patch.object(pd.Dataframe, 'apply')
    main()
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,我无法访问输入到的数据帧apply以测试其内容。

我还试图嘲笑do_something_with_each_row

# need pytest-mock and pytest
import pandas as pd


def test_not_working_again(mocker):
    mocked_to_something = mocker.patch('path.to.file.do_something_with_each_row')
    main()
Run Code Online (Sandbox Code Playgroud)

但这次我有所有带有行参数的调用,但它们都有None值。

我如何获取apply调用函数的数据帧并检查它是否确实与以下内容相同: …

pytest python-3.x pandas pytest-mock

8
推荐指数
1
解决办法
325
查看次数

标签 统计

pandas ×1

pytest ×1

pytest-mock ×1

python-3.x ×1