我正在用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