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

Pytest使用fixture做monkeypatch触发直接调用错误如何解决

报错根因

pytest 规定 fixture 只能通过测试函数、其他 fixture 的参数自动注入获取,不能像普通函数一样手动调用。你在 load_spacy_model fixture 内部的 _load_spacy_model 函数里直接执行了 get_staticdata_path(),属于直接调用 fixture,触发了规则校验报错。

修复方案

只需要修改 conftest.py 中的 load_spacy_model fixture,将 get_staticdata_path 作为参数注入即可,其余代码不需要调整:

import pytest
from pathlib import Path
import spacy


@pytest.fixture
def get_staticdata_path():
    static_data_path = (
        Path(
            __file__,
        )
        .resolve()
        .parent
        / ".."
        / ".."
        / "staticdata"
    )
    return static_data_path


@pytest.fixture
# 此处注入get_staticdata_path fixture,pytest会自动执行它并把返回值传入
def load_spacy_model(get_staticdata_path):
    def _load_spacy_model():
        # 直接用注入的路径值,不需要再调用get_staticdata_path()
        model_path = get_staticdata_path / "en_core_web_sm"
        nlp = spacy.load(model_path)
        return nlp

    yield _load_spacy_model

修改完成后重新运行测试,monkeypatch 就会按照预期把 TextUtils 的 _load_spacy_model 方法替换为从本地 staticdata 目录加载模型的自定义函数,不会再触发报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:36:03