【发布时间】:2021-08-31 13:36:47
【问题描述】:
我想使用 Pytest 为函数编写测试。该函数获取一个 id,通过该 id 找到视频文件的路径,然后在视频文件夹中创建另一个文件夹(将一些新文件放入其中)。这是函数:
def foo(id):
root_dir = find_local_dir(id) # finds the path to the video file
video_file = root_dir / 'video.mp4'
out_dir = root_dir / 'foo'
out_dir.mkdir(parents=True, exist_ok=True)
我在tests 目录中有一个视频,我想用于测试,我使用monkeypatch 来防止函数根据id 查找视频。但我不知道如何让它在 tests 中获取视频并在 tmp 中创建新文件夹,无需更改 foo。
我尝试将视频从tests 复制到tmp_path,但这不起作用:
def test_foo(tmp_path, monkeypatch):
id = '1234'
mock = MagicMock()
mock.return_value = tmp_path
monkeypatch.setattr(pipeline, 'find_local_dir', mock)
copy2('coffee.mp4', tmp_path / 'video.mp4')
var = pipeline.foo(id)
我遇到的错误是FileNotFoundError: [WinError 2] The system cannot find the file specified
我猜复制不起作用? (我对 Pytest 有点陌生,所以我不知道这是否可能。)
我很乐意在不更改 foo 的情况下使用任何其他方式来解决此问题。
谢谢。
编辑:
def find_local_dir(id):
local_dir = Path(f'/tmp/{id}')
local_dir.mkdir(parents=True, exist_ok=True)
return local_dir
【问题讨论】:
-
find_local_dir返回什么?原始字符串?或者是其他东西?你能分享一下它的实现吗? -
@NielGodfreyPonciano 我刚刚编辑了问题
标签: python pytest temporary-files