gpt4 book ai didi

python-3.x - 模拟 : Client does not have the attribute 'get_object'

转载 作者:行者123 更新时间:2023-12-03 08:45:56 25 4
gpt4 key购买 nike

我正在尝试修补 S3 get_object boto3 模块中的方法,但我不断收到以下错误

AttributeError: <function client at 0x104570200> does not have the attribute 'get_object'

这令人困惑,因为我能够成功修补 boto3.client但不是boto3.client.get_object ,尽管 boto3 文档声明它是客户端的方法之一

这是我的代码

import boto3
from mock import patch

@pytest.mark.parametrize(
'response, expected',
[
(200, True),
(400,False)
]
)

@patch('boto3.client.get_object')
def test_get_file(mock, response, expected):
mock.return_values = response
test = get_file('portfolio/test.xls')
assert test == expected

def get_file(self, key):
S3 = boto3.client('s3')
response = S3.get_object(bucket='portfolios', key=key)
if response.status == 200:
return response

return False

最佳答案

尝试模拟 botocore.client.BaseClient._make_api_call

Boto3 客户端是在运行时生成的,因此它们的方法和属性取决于服务名称。基础“ stub ”客户端可能没有该方法。

def mock_client(self, operation_name, kwarg) -> dict:
if operation_name == "GetObject":
# do the thing

...

@mock.patch('botocore.client.BaseClient._make_api_call', new=mock_client)
def test_your_stuff():
# do the test

另请注意,您需要知道您要使用的操作的 API 调用是什么。

或者:使用moto package ,对于 S3 等流行服务来说相当不错。

关于python-3.x - 模拟 : Client does not have the attribute 'get_object' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61479794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com