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

标签 java amazon-web-services mockito

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

我尝试模拟 AWSCredentialsProviderAWSCredentials 并使用 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)

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

那么,有没有可能的方法来模拟这些凭证值?

我正在使用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/

相关文章:

java - 无法模拟 ProcessBuilder

java - 这种类似于 jQuery 的语法在 Java 中有效吗?

amazon-web-services - AWS CLI : update-kubeconfig not working as expected

amazon-web-services - AWS XRAY SDK 问题 : Failed to begin subsegment named 'Amazon S3' : segment cannot be found

java - 是否可以使用 Mockito 进行严格的模拟?

java - JUnit 如何使用参数对象的不同值进行模拟?

java - OSGi Felix 依赖管理器注解和抽象类

java - 比较 float 及其副本

mysql - AWS Aurora 与 MySQL 的兼容性

java Mockito 验证抽象方法