如何测试针对AWS API编写的代码

时间:2011-06-06 01:11:37

标签: java testing junit tdd amazon-web-services

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

我到底该怎么做呢?我将使用JUnit,因为这是我最熟悉的。

提前感谢您的帮助。

6 个答案:

答案 0 :(得分:20)

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

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:3)

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

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

以下是一些暴露S3服务的内容:

答案 3 :(得分:2)

您可以查看LocalStack,这个框架可以提升功能齐全的本地云环境以进行集成测试。

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

答案 4 :(得分:2)

如上所述,回答更好的方法是模拟AWS API响应。获得API动作错觉的另一种方法是,使用干运行模式/参数调用AWS SDK或API。 但是在执行测试时可能需要访问Internet。

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

答案 5 :(得分:1)

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

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

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