修补的boto3断言无法识别会话调用

时间:2019-03-02 14:15:05

标签: unit-testing mocking boto3 patch assertion

我试图熟悉使用Mock来测试lambdafunctions,但是我似乎无法超越基础知识。我写了一个非常简单的脚本,开始测试是否进行了boto3调用。这只是打印找到的第一个实例的实例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_call起作用。当我打印出通过boto3.mock_calls发出的呼叫时,它可以清楚地标识出发出的呼叫:

[call.Session(profile_name ='ec2'),call.Session()。client('ec2')]

但是使用assert_call,我得到以下信息: AssertionError:预期已调用“无”。

如果我尝试类似boto3.Session()。assert_call_with(profile_name ='ec2')

我得到: AssertionError:预期的调用:模拟(profile_name ='ec2')

我尝试了诸如boto3.session.assert_call(),boto3.session.Session()。assert_Called()等变化形式

我的想法是我没有正确调用对象,或者没有正确获得会话对象的路径。谁能帮助我至少使会话断言起作用?

0 个答案:

没有答案