Python模拟功能参数

时间:2019-02-28 01:39:36

标签: python pandas unit-testing mocking

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

myfile.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_call_from_helper_function()中的api调用,但是当我将其作为参数传递给pd.DataFrame时却无法模拟它。我在做什么错了?

0 个答案:

没有答案