python - 如何模拟`s3fs.FileSystem().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))
我怎样才能做到这一点?我试过用mock
fromunittest
来写:
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>')
推荐阅读
- c# - 为什么使用 Entity Framework 检索记录需要这么长时间?
- javascript - 将类添加到下一个并删除最接近的表单
- javascript - 手风琴隐藏彼此的内容
- elasticsearch - 弹性搜索节点未加入集群
- sql - 需要过滤数据
- mysql - 获取下一行列值并将其添加到第一行列
- excel - 对象'_Global的方法'Union'失败
- sql - 聚合、分组错误,即使使用 OVER PARTITION BY
- forge - 是否可以通过设计自动化 api 修改 revit 模型的尺寸?如果是的话怎么办?
- delphi - 写入后 TFileStream 的 MD5 哈希不正确