Похоже, причина этого в том, что клиент переопределяется после применения Stubber и пытается по-настоящему использовать API.
Это минимальный пример, основанный на вашем вопросепоэтому, чтобы он работал с вашим кодом, вам, вероятно, придется применять этот принцип более широко при рефакторинге.Кроме того, я хотел бы рассмотреть возможность использования unittest framework .
. Во-первых, сделать возможным передать экземпляр клиента в код, который вы тестируете.
podcasts.py:
def decrypt_kms(kms_client):
access_key = kms_client.decrypt(
CiphertextBlob=base64.b64decode(os.environ['access_key'])
)['Plaintext'].decode()
return access_key
Затем в ваших тестах создайте заглушенный клиент и передайте его в код для проверки
tests.py:
from botocore.stub import Stubber
from podcasts import decrypt_kms
kms_decrypt_response = {'Plaintext': 'my_test_key'}
stubbed_client = boto3.client('kms')
stubber = Stubber(stubbed_client)
stubber.add_response('decrypt', kms_decrypt_response)
stubber.activate()
result = decrypt_kms(kms_client=stubbed_client)