Как вы тестируете код, написанный против 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:

  • S3Ninja (фактически написанный на Java)
  • FakeS3 (ruby)
  • s3mock (Scala с Java API)

Ответ 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