2011-06-06 39 views
14

我正在用Java编写一个应用程序,该应用程序会将文件上传到AWS S3。该文件将以参数形式提供给应用程序,而不是硬编码。我想编写测试以确保文件实际上传到S3。测试将在TDD代码之前编写。 (我实际上已经写了代码,但是我想把TDD做法融入到我所有的工作当中)如何测试针对AWS API编写的代码

我到底会如何去做这件事?我将使用JUnit,因为这是我最熟悉的。

预先感谢任何帮助。

回答

18

实际的上传和正在做的测试是你集成测试,而不是单元测试的一部分。如果您将S3 API封装在非常薄的类中,您将嘲笑该类以进行业务类的单元测试,并且您将使用真正的实现进行集成测试。
如果您已经决定,您的业务类直接取AmazonS3接口,那么对于单元测试,你必须嘲笑那一个。

实际的探索性测试(学习和验证)亚马逊s3是否以及如何工作是您在单独的实验设置中实际做的。

P.S.我不建议直接在您的商务类中使用AmazonS3接口,而是将其包装在您的精简接口中,以便如果您决定更改“后端存储”,则可以轻松更改它。

+1

你可以给这样的瘦S3包装的一些示例代码? – Nayn 2011-08-16 18:12:52

4

我不是Java程序员,但你可能想看看mocking。有一个叫做MockService的SoapUI工具,它似乎允许模仿AWS提供的外部服务。

2

Op De Cirkel答案在单元测试范围内很好,但如果您正在编写框架支持或仅需要需要以在测试期间运行AWS S3调用,则可以运行提供AWS兼容API的任何服务。 OpenStack就是其中之一,可以在虚拟机中运行(请参阅DevStack)。

或者您可以从各种面向测试的工具中进行选择,这些工具提供了与AWS兼容的API。

这里有一些暴露S3服务:

  • S3Ninja(实际上是用Java编写的)
  • FakeS3(红宝石)
  • s3mock(斯卡拉使用Java API)
1

你可以看看LocalStack,这是一个为全面功能本地云环境提供集成测试的框架。

LocalStack提供了AWS云服务的一个子集,包括S3,Kinesis,Lambda,DynamoDB等。

1

问题很久以前就回答,但我想评论的另一种方法。

在我测试不同的Python项目期间,我一直在使用this library。即使您使用Java或Scala等其他语言开发,因为您可以设置后台服务器并模拟所有AWS调用,我发现它非常有用。

您可以在README末尾找到有关“独立服务器模式”的更多信息。

相关问题