我有一个函数,其中包括以下内容:
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>')
关于python - 如何模拟 `s3fs.FileSystem().glob` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59356245/