如何模拟 's3fs.文件系统().glob'?



我有一个函数,其中包括以下内容:

FS = s3fs.S3FileSystem()
def my_function(s3_path: str):
files = FS.glob('s3://'+s3_path)

它列出了 AWS S3 上与某个字符串匹配的所有文件s3_path然后(稍后(下载它们。

测试此功能时,我不想每次都连接到 AWS S3。但我确实想检查我下载的文件会发生什么。

所以,我在本地制作了一个名为testinputs的文件夹。在这里,我复制了我在 AWS S3 上的一些文件。

我当时的想法是模拟FS.glob(s3_path)调用,以便它返回

import glob
glob.glob(os.path.join('testinputs', s3_path))

我该怎么做?我尝试使用unittest中的mock来编写:

from unittest import mock
def test_my_function():
with mock.patch('s3fs.S3FileSystem') as mock_fs:
mock_fs.glob = glob.glob
my_function('<SOME FILE PATH>')

但这似乎并没有改变FS.glob的行为。

最终明白了:

import pytest
from glob import glob
def test_my_function(monkeypatch):
monkeypatch.setattr(mypackage.myfile.FS, "glob", glob)
my_function('<SOME FILE PATH>')

相关内容

最新更新