我正在尝试模拟secrets manager client
,之前变量不在类中,所以我可以直接使用如下补丁模拟客户端:
@patch('my_repo.rc.client')
现在,由于我使用的是示例方法,我需要模拟示例方法。
rc.py
import boto3
import json
from services.provisioner_logger import get_provisioner_logger
from services.exceptions import UnableToRetrieveDetails
class MyRepo(object):
def __init__(self, region):
self.client = self.__get_client(region)
def id_lookup(self, category):
logger = get_provisioner_logger()
try:
response = self.client.get_secret_value(SecretId=category)
result = json.loads(response['SecretString'])
logger.info("Got value for secret %s.", category)
return result
except Exception as e:
logger.error("unable to retrieve secret details due to ", str(e))
raise Exception("unable to retrieve secret details due to ", str(e))
def __get_client(self, region):
return boto3.session.Session().client(
service_name='secretsmanager',
region_name=region
)
测试_安全性.py
from unittest import TestCase
from unittest.mock import patch, MagicMock
from my_repo.rc import MyRepo
import my_repo
class TestSecretManagerMethod(TestCase):
def test_get_secret_value(self):
with patch.object(my_repo.rc.MyRepo, "id_lookup") as fake_bar_mock:
fake_bar_mock.get_secret_value.return_value = {
"SecretString": '{"secret": "gotsomecreds"}',
}
actual = MyRepo("eu-west-1").id_lookup("any-name")
self.assertEqual(actual, {"secret": "gotsomecreds"})
现在,我尝试用SO post来实现相同的功能,但最终结果并不匹配。
self.assertEqual(actual, {"secret": "gotsomecreds"})
AssertionError: <MagicMock name='id_lookup()' id='4589498032'> != {'secret': 'gotsomecreds'}
我想我已经接近了,但无法找出我到底错过了什么。
1条答案
按热度按时间khbbv19g1#
好吧,我们要一个模拟,我们不需要魔术模拟。事实上,我们要三个。
第一,会议
然后客户,
这个模拟客户端将返回您的响应:
会话客户端将返回以下内容:
好吧。确实很多,但我们有客户在里面。把这些加在一起,我们有
(The顶部的
@path
与内部的with
相同,对吗?)