Я пытаюсь ознакомиться с использованием Mock для тестирования лямбда-функций, но я не могу пройти мимо основ.Я написал очень простой скрипт, чтобы начать тестирование.Этот просто печатает ID экземпляра первого найденного экземпляра:
import boto3
def get_client():
session = boto3.Session(profile_name='ec2')
client = session.client('ec2')
return client
def get_instance_id(client):
response = client.describe_instances()
return response['Reservations'][0]['Instances'][0]['InstanceId']
def main():
client = get_client()
id = get_instance_id(client)
print(id)
if __name__ == "__main__":
main()
Я пытаюсь исправить весь класс boto3 для использования в различных утверждениях, в основном, чтобы утверждать, что все соответствующие вызовы были сделаны.Ниже приведена основная попытка утверждать, что сеанс boto3 назывался:
import unittest
from unittest.mock import patch
from main import *
@patch('main.boto3')
class TestMain(unittest.TestCase):
def setUp(self):
pass
def test_get_client(self,boto3):
get_client() # test client call function directly
boto3.Session().assert_called()
Я просто не могу заставить assert_called работать.Когда я распечатываю вызовы, сделанные с помощью boto3.mock_calls, он четко идентифицирует сделанные вызовы:
[call.Session (profile_name = 'ec2'), call.Session (). Client ('ec2')]
Но с assert_called я просто получаю следующее: AssertionError: Ожидается, что 'None' был вызван.
Если я попробую что-то вроде boto3.Session (). Assert_called_with (profile_name = 'ec2')
Я получаю: AssertionError: Ожидаемый вызов: mock (profile_name =' ec2 ')
Я пробовал с такими вариациями, как boto3.session.assert_called (), boto3.session.Session() .assert_called () и т. д.
Я думаю, что я неправильно понимаю вызов объекта или неверный путь к объекту сеанса.Может кто-нибудь помочь мне хотя бы заставить сессионное утверждение работать?