使用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
相关产品推荐
相关产品推荐

