使用mockito

时间:2017-08-30 09:37:08

标签: java amazon-web-services mockito

我在类中有一个方法,其中内部调用AmazonS3Client.java,其中AwsCredetialsProvider.getCredentials()被调用。为此,我需要在我的测试类中设置AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY。在我的项目中不允许在环境变量中设置这些值。

我尝试过模拟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凭据。

所有方法调用都是在内部调用预定义类和方法的项目中指定的。

1 个答案:

答案 0 :(得分:0)

考虑模仿AmazonS3Client类而不是内部使用的东西。如果某天AWS库将获得更新AmazonS3Client内部的更新,那么您的测试可能会被破坏。

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

然后设置要返回的对象

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