2017-08-30 141 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

你可以添加更多的代码到这个问题吗? –