2017-08-30 60 views
2

我在類中有一個方法,其中內部調用AmazonS3Client.java,其中AwsCredetialsProvider.getCredentials()被調用。爲此,我需要在我的測試課程中設置AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY。在我的項目中不允許在環境變量中設置這些值。使用mockito設置AWS環境變量的替代方案

我試圖模擬AWSCredentialsProviderAWSCredentials並使用存根來返回憑證。但它拋出以下錯誤:

com.amazonaws.AmazonClientException: Unable to load AWS credentials from any provider in the chain 
at com.amazonaws.auth.AWSCredentialsProviderChain.getCredentials(AWSCredentialsProviderChain.java:131) 
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3648) 
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3607) 
at com.amazonaws.services.s3.AmazonS3Client.listObjects(AmazonS3Client.java:600) 

即使我已經嘗試使用MockEnvironmentConfigurationProperties也設置這些值。但沒有發生。

那麼,有沒有什麼可能的方法來模擬這些憑證值?我正在使用MockitoJRunner。所以,我不能只用一種方法將它改爲Powermockito。

被修改: 我想通過調用listObjects()從S3獲取文件。這是我面臨的問題,因爲它需要AWS憑據來提取。

所有的方法調用都是在內部調用預定義的類和方法時指定的項目。

+0

請將您的單元測試的代碼。 –

回答

0

考慮嘲笑AmazonS3Client類,而不是內部使用的東西。如果有一天AWS庫會得到一個更新AmazonS3Client內部的更新,那麼你可能會破壞你的測試。

AmazonS3Client amazonClient = Mockito.mock(AmazonS3Client.class); 

,然後設置對象返回

Mockito.doReturn(objListing).when(amazonClient).listObjects(bucketName); 
+0

仍然得到相同的例外.. :( – swetha

+0

你可以添加更多的代碼到這個問題嗎? –