使用 mockito 设置 AWS 环境变量的替代方法

swe*_*tha 5 java mockito amazon-web-services

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

我曾尝试 Mock 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)
Run Code Online (Sandbox Code Playgroud)

连我都尝试使用设置这些值MockEnvironmentConfigurationProperties太。但什么也没发生。

那么,是否有任何可能的方法来模拟这些凭证值?

我正在使用MockitoJRunner. 因此,我不能仅针对一种方法将其更改为 Powermockito。

编辑: 我想通过调用从 S3 获取文件listObjects()。这是我面临的问题,因为它需要 AWS 凭证才能获取。

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

Ale*_*iak 0

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

AmazonS3Client amazonClient = Mockito.mock(AmazonS3Client.class);
Run Code Online (Sandbox Code Playgroud)

然后设置要返回的对象

Mockito.doReturn(objListing).when(amazonClient).listObjects(bucketName);
Run Code Online (Sandbox Code Playgroud)

  • 仍然遇到同样的异常..:( (2认同)