Cómo burlarse de un objeto / llamada de cliente boto3

Estoy tratando de burlarme de una función particular de boto3. Mi módulo, Cleanup, importa boto3. La limpieza también tiene una clase, "limpiador". Durante init, Cleaner crea un cliente ec2:

self.ec2_client = boto3.client('ec2')

Quiero burlarme del método del cliente ec2: desribe_tags (), que python dice es:

<bound method EC2.describe_tags of <botocore.client.EC2 object at 0x7fd98660add0>>

Lo más lejos que he llegado es importar botocore en mi archivo de prueba e intentar:

mock.patch(Cleaner.botocore.client.EC2.describe_tags)

que falla con:

AttributeError: 'module' object has no attribute 'EC2'

¿Cómo me burlo de este método?

La limpieza se ve así:

import boto3
class cleaner(object):
    def __init__(self):
        self.ec2_client = boto3.client('ec2')

El objeto ec2_client es el que tiene el método desribe_tags (). Es un objeto botocore.client.EC2, pero nunca importo directamente botocore.

Respuestas a la pregunta(2)

Su respuesta a la pregunta