使用Mockito设置AWS环境变量的替代方案



i在类中有一种方法,其中内部调用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证书才能获取。

所有方法呼叫均指定项目,其中内部调用预定义的类和方法。

考虑嘲笑AmazonS3Client类,而不是它在内部使用的类别。如果有一天AWS库将获得更新的更新,以更改AmazonS3Client内部内容,则可能会打破测试。

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

然后设置要返回的对象

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

最新更新