You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python复杂场景下Mock RandomForestClassifier的路径选择问题

正确的Mock路径及解释

核心规则

unittest.mock.patch的关键是patch对象被实际使用的模块中的引用,而非对象的定义位置。

正确的patch路径

针对你的代码结构,正确的patch路径是:

@mock.patch("supervised_model.RandomForestClassifier")

为什么之前的尝试无效

  • @patch("RandomForestClassifier"):测试模块中未导入该类,patch会在当前测试模块的命名空间中查找,自然找不到目标。
  • @patch("smodel.RandomForestClassifier"):smodel既不是模块名,也不是测试模块中的变量,无法定位到目标引用。

修正后的测试用例

from process import Processer
from unittest import mock

@mock.patch("supervised_model.RandomForestClassifier")
def test_processer(patched_rf):
    patched_rf.return_value.predict_proba.return_value = "foo"
    processer = Processer()
    assert processer.model.smodel.model.predict_proba([[1., 2.], [3., 4.]]) == "foo"

补充说明

如果你的model.py中实际导入语句是from supervised_model import SModel(而非你写的from supervised import SModel),上述路径完全适用。本质是找到RandomForestClassifier被SModel类引用的模块——也就是supervised_model.py,所以patch该模块下的这个类即可。

内容的提问来源于stack exchange,提问作者thetradingdogdj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 18:52:38