Python 3.x Mock:客户端没有属性';获取对象';
我试图从boto3模块中修补S3Python 3.x Mock:客户端没有属性';获取对象';,python-3.x,mocking,boto3,Python 3.x,Mocking,Boto3,我试图从boto3模块中修补S3get_object方法,但我一直得到以下错误 AttributeError:没有“get\u object”属性 这是令人费解的,因为我能够成功地修补boto3.client,但不能修补boto3.client.get\u对象,即使boto3文档声明它是客户端的方法之一 这是我的密码 import boto3 from mock import patch @pytest.mark.parametrize( 'response, expected',
get_object
方法,但我一直得到以下错误
AttributeError:没有“get\u object”属性
这是令人费解的,因为我能够成功地修补boto3.client
,但不能修补boto3.client.get\u对象,即使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.\u调用api\u
Boto3客户端是在运行时生成的,因此它们的方法和属性取决于服务名称。基本“存根”客户端可能没有该方法
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调用是什么
或者:使用它,它对S3这样的流行服务相当好。尝试模拟botocore.client.BaseClient.\u调用api\u
Boto3客户端是在运行时生成的,因此它们的方法和属性取决于服务名称。基本“存根”客户端可能没有该方法
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调用是什么
或者:使用它,对于S3这样的流行服务来说相当不错