Python返回MagicMock而不是return_value

问题描述

我正在尝试读取来自AWS secretmanager.get_secret_value的模拟响应。

代码中的功能看起来像

import boto3

def get_secret()
  session = boto3.Session(
        {aws credentials}
  )
  
  client = session.client(
    service_name='secretmsmanager'
  )
  
  try:
    get_secret_value_response = client.get_secret_value(
      SecretId={id}
    )
  except Exception as e:
      do something
  else:
    if 'SecretString' in get_secret_value_response:
        do something
    else:
        do something

我的测试看起来像这样

import boto3
from unittest.mock import patch,Magicmock
from function_code_module import function_code


@patch('function_code_module.fucntion_code.boto3')
def test_secretsmanager(mock_boto):
    get_Secret_Response = {
        'ARN': 'string','Name': 'string','VersionId': 'string','SecretBinary': b'bytes','SecretString': 'string','VersionStages': [
            'string',],'CreatedDate': datetime(2020,1,1)
    }
    
    client_mock = Magicmock()
    client_mock.get_secret_value = Magicmock(return_value=get_Secret_Response)
    mock_boto.client = Magicmock(return_value=client_mock)
    
    response = function.get_secret()
    assert response is not None

尽管模拟响应具有'SecretString',但我所面临的问题仍然存在于函数中if语句的其他部分。因为它不是读为dict,而是在那个地方是Magicmock

我收到的错误是:

TypeError:参数应为类似字节的对象或ASCII字符串,而不是 'Magicmock'

我尝试了return_value的许多组合,在以下三个语句中执行,到目前为止没有运气

    client_mock = Magicmock()
    client_mock.get_secret_value = Magicmock(return_value=get_Secret_Response)
    mock_boto.client = Magicmock(return_value=client_mock)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)