我正在用Java编写一个应用程序,该应用程序会将文件上传到AWS S3。该文件将以参数形式提供给应用程序,而不是硬编码。我想编写测试以确保文件实际上传到S3。测试将在TDD代码之前编写。 (我实际上已经写了代码,但是我想把TDD做法融入到我所有的工作当中)如何测试针对AWS API编写的代码
我到底会如何去做这件事?我将使用JUnit,因为这是我最熟悉的。
预先感谢任何帮助。
我正在用Java编写一个应用程序,该应用程序会将文件上传到AWS S3。该文件将以参数形式提供给应用程序,而不是硬编码。我想编写测试以确保文件实际上传到S3。测试将在TDD代码之前编写。 (我实际上已经写了代码,但是我想把TDD做法融入到我所有的工作当中)如何测试针对AWS API编写的代码
我到底会如何去做这件事?我将使用JUnit,因为这是我最熟悉的。
预先感谢任何帮助。
实际的上传和正在做的测试是你集成测试,而不是单元测试的一部分。如果您将S3 API封装在非常薄的类中,您将嘲笑该类以进行业务类的单元测试,并且您将使用真正的实现进行集成测试。
如果您已经决定,您的业务类直接取AmazonS3接口,那么对于单元测试,你必须嘲笑那一个。
实际的探索性测试(学习和验证)亚马逊s3是否以及如何工作是您在单独的实验设置中实际做的。
P.S.我不建议直接在您的商务类中使用AmazonS3接口,而是将其包装在您的精简接口中,以便如果您决定更改“后端存储”,则可以轻松更改它。
我不是Java程序员,但你可能想看看mocking。有一个叫做MockService的SoapUI工具,它似乎允许模仿AWS提供的外部服务。
你可以看看LocalStack,这是一个为全面功能本地云环境提供集成测试的框架。
LocalStack提供了AWS云服务的一个子集,包括S3,Kinesis,Lambda,DynamoDB等。
正如上面提到的答案,更好的方法是模拟AWS API响应。获得API操作错觉的另一种方法是使用干运行模式/参数调用AWS SDK或API。 但是您在执行测试时可能需要访问互联网。
问题很久以前就回答,但我想评论的另一种方法。
在我测试不同的Python项目期间,我一直在使用this library。即使您使用Java或Scala等其他语言开发,因为您可以设置后台服务器并模拟所有AWS调用,我发现它非常有用。
您可以在README末尾找到有关“独立服务器模式”的更多信息。
你可以给这样的瘦S3包装的一些示例代码? – Nayn 2011-08-16 18:12:52