2011-06-06 38 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末尾找到有關「獨立服務器模式」的更多信息。

相關問題