Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Mock:客户端没有属性';获取对象';_Python 3.x_Mocking_Boto3 - Fatal编程技术网

Python 3.x Mock:客户端没有属性';获取对象';

Python 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',

我试图从boto3模块中修补S3
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这样的流行服务来说相当不错