模拟同一功能的两种方法 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
作品。模拟的目的通常是模拟您正在测试的事物的输入或依赖关系,而不是事物本身。
我想模拟 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
作品。模拟的目的通常是模拟您正在测试的事物的输入或依赖关系,而不是事物本身。