python - 如何模拟 `s3fs.FileSystem().glob` ?

标签 python amazon-web-services testing mocking

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

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/

相关文章:

ruby-on-rails - 带有局部变量的 FactoryGirl

python - 缓存通过 API 获取的在线价格,除非它们发生变化

amazon-web-services - 如何使用 CloudFormation 将卷附加和装载到 EC2 实例

amazon-web-services - Date RangeKey 的 DynamoDB 排序顺序

node.js - NodeJS 中用于 API 的 stub DynamoDB

c# - MSTest VS2010 - DeploymentItem 将文件复制到不同机器上的不同位置

forms - capybara 选择方法无法找到单选按钮

python - 得到除法后的所有小数位

python - 如何在 Python 中对日期执行算术运算?

python - Django 管理面板无法向表中添加任何记录