Как вы тестируете код, написанный против AWS API
Я пишу приложение на Java, которое загрузит файл до AWS S3. Файл будет передан приложению в аргументе, а не в hardcoded. Я бы хотел написать тесты, чтобы файл фактически загружался на S3. Тест будет записан до кода TDD. (Я на самом деле уже написал код, но я хотел бы внедрить методы TDD во всю мою работу как привычку)
Как я могу это сделать? Я буду использовать JUnit как то, с чем я больше всего знаком.
Заранее благодарим за помощь.
Ответы
Ответ 1
Фактическая загрузка и те тесты, которые это делают, являются частью вашего тестирования интеграции, а не модульного тестирования. Если вы оберните S3 API в очень тонком классе, вы будете издеваться над этим классом для модульного тестирования ваших бизнес-классов, и вы будете использовать реальную реализацию для тестирования интеграции.
Если вы решили, что ваши бизнес-классы должны непосредственно использовать интерфейс AmazonS3, то для модульного тестирования вы должны издеваться над этим.
Фактическое разведочное тестирование (обучение и проверка), если и как работает amazon s3, - это то, что вы на самом деле делаете в отдельной экспериментальной установке.
P.S. Я не рекомендую использовать интерфейс AmazonS3 непосредственно в ваших бизнес-классах, а не обертывать его тонким интерфейсом, поэтому, если вы решите изменить "внутреннее хранилище", вы можете легко его изменить.
Ответ 2
Я не программист на Java, но вы, вероятно, захотите изучить насмешку. Существует инструмент SoapUI, называемый MockService, который, как представляется, позволяет насмехаться над внешней службой, например, предоставляемой AWS.
Ответ 3
Ответ Op De Cirkel хорош в области модульного тестирования, но если вы пишете поддержку фреймворка или просто нуждаетесь для запуска вызовов AWS S3 во время тестов, вы можете запускать любые службы, которые предлагают API, совместимые с AWS, OpenStack является одним из них и может быть запущен на виртуальной машине (см. DevStack).
Или вы можете выбрать из множества тестовых инструментов, которые предоставляют API, совместимые с AWS.
Вот некоторые из них, которые показывают службу S3:
Ответ 4
Вы можете взглянуть на LocalStack, структуру, которая объединяет полностью функциональную локальную облачную среду для тестирования интеграции.
LocalStack предоставляет подмножество облачных сервисов AWS, включая S3, Kinesis, Lambda, DynamoDB и т.д.
Ответ 5
Вопрос был дан ответ давно, но я хотел бы прокомментировать другой подход.
Во время моего тестирования в разных проектах Python я использовал эту библиотеку. Я нашел это очень полезным, даже если вы разрабатываете другие языки, такие как Java или Scala, потому что вы можете настроить фоновый сервер и высмеять все вызовы AWS.
Дополнительную информацию о "автономном режиме сервера" вы можете найти в конце README.
Ответ 6
Как было предложено в вышеприведенном ответе, лучше подойти к ответу AWS API. Другой альтернативой для получения иллюзии действия API является вызов AWS SDK или API с режимом/параметром сухого режима.
Но при выполнении тестов вам может потребоваться доступ в Интернет.
http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/ec2/model/DryRunResult.html