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

使用Pytest测试同路径查找创建文件的函数,如何使其在临时目录运行

错误原因

你遇到的FileNotFoundError是因为复制测试视频时使用了相对路径'coffee.mp4',pytest运行时的工作目录不一定等于测试用例文件所在的tests目录,系统找不到源视频文件导致复制失败,和foo函数本身的逻辑无关。

无需修改原函数的解决方案

仅调整测试用例代码,正确获取测试视频的绝对路径即可,以下是完整可运行的测试代码:

import shutil
from pathlib import Path
from unittest.mock import MagicMock
import pytest
# 此处替换为你实际导入pipeline模块的语句
import pipeline

def test_foo(tmp_path, monkeypatch):
    test_id = '1234'
    # 模拟find_local_dir返回pytest临时目录,和原函数逻辑解耦
    mock_find_local = MagicMock(return_value=tmp_path)
    monkeypatch.setattr(pipeline, 'find_local_dir', mock_find_local)

    # 核心修改:通过当前测试文件的路径拼接出测试视频的绝对路径
    test_file_dir = Path(__file__).parent
    source_video_path = test_file_dir / 'coffee.mp4'
    # 复制到临时目录
    shutil.copy2(source_video_path, tmp_path / 'video.mp4')

    # 执行待测函数
    pipeline.foo(test_id)

    # 可选:增加断言验证执行结果符合预期
    # 验证foo输出目录已创建
    assert (tmp_path / 'foo').is_dir()
    # 验证find_local_dir被正确传参调用
    mock_find_local.assert_called_once_with(test_id)
补充说明
  • 上述代码用Path(__file__).parent获取当前测试文件所在的tests目录绝对路径,不管pytest在哪个工作目录下执行都能正确找到测试视频,不需要依赖其他fixture。
  • 你之前的monkeypatch逻辑是正确的,foo函数会直接使用你传入的临时目录读写,不会影响真实路径下的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:15:00