首页 > 解决方案 > Python 模拟函数参数

问题描述

我有一个myfile.py不接受任何参数的函数。在函数内部,我正在DataFrame根据从 API 调用返回的数据创建一个熊猫,如下所示:df = pd.DataFrame(api_call_from_helper_function().all_the_data()). 我正在尝试模拟 API 调用,因此它不会尝试实际连接到 API。以下是我的尝试:

我的文件.py

def make_dataframe_from_data():
    df = pd.DataFrame(api_call_from_helper_function().all_the_data())
    return df

test_myfile.py

import pandas as pd
from unittest.mock import MagicMock
import myfile
from myfile import make_dataframe_from_data


def test_make_dataframe_from_data(monkeypatch):
    mock_df = MagicMock()
    mock_instance = MagicMock(return_value=mock_df)
    monkeypatch.setattr("pd.DataFrame", mock_instance)
    result = make_dataframe_from_data()
    mock_instance.assert_called_once()
    assert isinstance(result, pd.DataFrame())

在这段代码中,api_call_from_helper_function()使用了我创建的另一个函数来进行 api 调用,并且附加的.all_the_data()返回它获得的所有数据。现在我的测试可以模拟 api 调用,api_call_from_helper_function()但是当我将它作为参数传递给pd.DataFrame. 我究竟做错了什么?

标签: pythonpandasunit-testingmocking

解决方案


推荐阅读