模拟同一功能的两种方法 python

Mock two methods for the same function python

我想模拟 sklearn model 的两个方法(predict_proba 和 classes_)。我有一个函数可以接收模板和文本,以及 returns 标签和分数。

import numpy as np
from unittest.mock import MagicMock

def model_predict_proba(model, text):
    pred_proba_model = model.predict_proba([text])
    score = pred_proba_model.max()
    label = model.classes_[np.argmax(pred_proba_model)]
    return label, score


def test_model_predict_proba():
    mock_model = MagicMock()
    mock_model.predict_proba.return_value = np.array([0.90, 0.23])
    mock_model.classes_.return_value= np.array(['FOOD', 'DRINK'])
    text = 'Apple pie'

    expected = ("FOOD", 0.90)
    result = model_predict_proba(mock_model, text)
    
    assert result == expected

当我运行这个测试时,我收到以下错误信息:

有人可以帮助我吗?

这应该可以解决问题:

def model_predict_proba(model, text):
    pred_proba_model = model.predict_proba([text])
    score = pred_proba_model.max()
    label = model.classes_[np.argmax(pred_proba_model)]
    return label, score


def test_model_predict_proba():
    mock_model = MagicMock()
    mock_model.predict_proba.return_value.max.return_value = 0.90
    mock_model.classes_.__getitem__.return_value ='FOOD'
    text = 'Apple pie'

    expected = ("FOOD", 0.90)
    result = model_predict_proba(mock_model, text)

    assert result == expected

请注意,由于您是在模拟模型,因此此测试实际上并未以任何有用的方式测试模型——我假设您编写此函数只是为了理解 MagicMock 作品。模拟的目的通常是模拟您正在测试的事物的输入或依赖关系,而不是事物本身。