我在类中有一个方法,该方法在内部调用 AmazonS3Client.java
,其中调用了 AwsCredetialsProvider.getCredentials()
。为此,我需要在测试类中设置 AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
。在我的项目中不允许在环境变量中设置这些值。
我尝试模拟 AWSCredentialsProvider
和 AWSCredentials
并使用 stub 返回凭证。但它抛出以下错误:
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)
即使我也尝试使用 MockEnvironment
、ConfigurationProperties
设置这些值。但什么也没发生。
那么,有没有可能的方法来模拟这些凭证值?
我正在使用MockitoJRunner
。因此,我不能仅将一种方法将其更改为 Powermockito。
编辑:
我想通过调用 listObjects()
从 S3 获取文件。这就是我面临问题的地方,因为它需要 AWS 凭证才能获取。
所有方法调用都是项目指定的,其中内部调用预定义的类和方法。
最佳答案
考虑模拟 AmazonS3Client
类,而不是它内部使用的东西。如果有一天 AWS 库将获得更改 AmazonS3Client
内部结构的更新,那么您的测试可能会被破坏。
AmazonS3Client amazonClient = Mockito.mock(AmazonS3Client.class);
然后设置要返回的对象
Mockito.doReturn(objListing).when(amazonClient).listObjects(bucketName);
关于java - 使用mockito设置AWS环境变量的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45956901/