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

如何在测试场景下修改Luigi类的依赖输入路径,获取指定测试文件路径

问题原因

你每次调用class_instance.requires()都会重新执行方法逻辑,返回一个全新的LocalTarget("test_file.txt")实例,所以你修改前一次调用返回实例的path属性,下一次调用拿到的还是原路径的新实例,自然不会生效。

解决方案

方案1:给Luigi任务新增参数(推荐,符合Luigi原生设计)

如果除了测试外,日常也有动态修改输入路径的需求,直接给任务新增可配置的路径参数即可,无需打补丁,代码可维护性更高:

import pytest
import luigi


class LuigiToBeTested(luigi.ExternalTask):
    # 新增路径参数,默认值保留原始的test_file.txt
    input_path = luigi.Parameter(default="test_file.txt")
    def requires(self):
        return luigi.LocalTarget(self.input_path)


def test_Luigi():
    # 测试场景下传入自定义的测试文件路径
    class_instance = LuigiToBeTested(input_path="data.json")
    print('/////', class_instance.requires().path) # 输出data.json

方案2:用pytest monkeypatch打补丁(无需修改原有业务代码)

如果不想改动原有业务类的代码,只在测试时临时修改逻辑,可以用pytest自带的monkeypatch工具mockrequires方法的返回值:

import pytest
import luigi


class LuigiToBeTested(luigi.ExternalTask):
    def requires(self):
        return luigi.LocalTarget("test_file.txt")


def test_Luigi(monkeypatch):
    class_instance = LuigiToBeTested()
    # 直接mock整个requires方法的返回值
    monkeypatch.setattr(class_instance, "requires", lambda: luigi.LocalTarget("data.json"))
    print('/////', class_instance.requires().path) # 输出data.json

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:24:04