Исправлено утверждение boto3, не идентифицирующее сеансовый вызов - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь ознакомиться с использованием 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 () и т. д.

Я думаю, что я неправильно понимаю вызов объекта или неверный путь к объекту сеанса.Может кто-нибудь помочь мне хотя бы заставить сессионное утверждение работать?

...