Я хочу провести модульное тестирование некоторого кода, который вызывает метод клиента boto3
s3
.Я не могу использовать moto
, потому что этот конкретный метод (put_bucket_lifecycle_configuration
) еще не реализован в moto
.Я хочу издеваться над клиентом S3 и заверить, что этот метод был вызван с конкретными параметрами.
Код, который я хочу протестировать, выглядит примерно так:
# sut.py
import boto3
class S3Bucket(object):
def __init__(self, name, lifecycle_config):
self.name = name
self.lifecycle_config = lifecycle_config
def create(self):
client = boto3.client("s3")
client.create_bucket(Bucket=self.name)
rules = # some code that computes rules from self.lifecycle_config
# I want to test that `rules` is correct in the following call:
client.put_bucket_lifecycle_configuration(Bucket=self.name, \
LifecycleConfiguration={"Rules": rules})
def create_a_bucket(name):
lifecycle_policy = # a dict with a bunch of key/value pairs
bucket = S3Bucket(name, lifecycle_policy)
bucket.create()
return bucket
В моем тесте я хотел бы вызвать create_a_bucket()
(хотя создание экземпляра S3Bucket
напрямую такжеи убедитесь, что вызов put_bucket_lifecycle_configuration
был сделан с правильными параметрами.
Я перепутал с unittest.mock
и botocore.stub.Stubber
, но мне не удалось взломать это.Если не указано иное, я не публикую свои попытки, поскольку они пока не увенчались успехом.
Я открыт для предложений по реструктуризации кода, который я пытаюсь протестировать, чтобы облегчить его тестирование.