Как тестировать код, написанный на AWS API

Я пишу приложение на Java, которое будет загружать файл до AWS S3. Файл будет передан приложению в аргументе, а не жестко закодирован. Я хотел бы написать тесты, чтобы убедиться, что файл действительно загружается в S3. Тест будет написан перед кодом TDD. (На самом деле я уже написал код, но я хотел бы внедрить практику TDD во всю свою работу как привычку)

Как именно я буду это делать? Я с помощью JUnit, как это я наиболее знакомые.

заранее спасибо за любую помощь.

6 ответов


фактическая загрузка и тесты, которые это делают, являются частью вашего интеграционное тестирование, а не тестирование. Если вы обернете API S3 в очень тонкий класс, вы будете издеваться над этим классом для модульного тестирования ваших бизнес-классов, и вы будете использовать реальную реализацию для интеграционного тестирования.
Если вы решили, ваш бизнес классы, чтобы взять непосредственно интерфейс AmazonS3, затем для модульного тестирования вы должны издеваться вот этот.

фактический произвольного тестирования (изучение и проверка) если и как работает amazon s3, это то, что вы действительно делаете в отдельной экспериментальной установке.

P.S. Я не рекомендую использовать интерфейс AmazonS3 непосредственно в ваших бизнес-классах, скорее, оберните его в тонкий интерфейс, чтобы, если вы решите изменить "back-end storage", вы могли легко изменить его.


Я не программист Java, но вы, вероятно, хотите посмотреть в издевательский. Существует инструмент SoapUI под названием MockService это, по-видимому, позволяет издеваться над внешней службой, такой как AWS.


Op De Cirkel ответ хорош в области модульного тестирования, но если вы пишете поддержку фреймворка или просто нужно для выполнения вызовов AWS S3 во время тестов можно запустить любую службу, предлагающую API, совместимые с AWS. OpenStack одна из них и может быть запущена в виртуальной машине (см. DevStack).

или вы можете выбрать один из различных инструментов, ориентированных на тестирование, которые предоставляют API, совместимые с AWS.

вот некоторые, которые подвергают S3 обслуживание:

  • S3Ninja (на самом деле написано на Java)
  • FakeS3 (Рубин)
  • s3mock (Scala с Java API)

вы могли бы взглянуть на LocalStack, фреймворк, который запускает полностью функциональную локальную облачную среду для интеграционного тестирования.

LocalStack предоставляет подмножество облачных сервисов AWS, включая S3, Kinesis, Lambda, DynamoDB и другие.


Как предложено в приведенном выше ответе, лучший подход-это макет ответа AWS API. Другой альтернативой, чтобы получить иллюзию действия API, является вызов AWS SDK или API с режимом/параметром сухого запуска. Но при выполнении тестов может потребоваться доступ в интернет.

http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/ec2/model/DryRunResult.html


на вопрос был дан ответ давно, но я хотел бы прокомментировать другой подход.

во время моего тестирования в разных проектах Python я использовал библиотека. Я нашел это очень полезным, даже если вы разрабатываете с другими языками, такими как Java или Scala, потому что вы можете настроить фоновый сервер и издеваться над всеми вызовами AWS.

вы можете найти более подробную информацию о" автономном режиме сервера " в конце README.