如何为测试禁用 AWS 参数存储自动配置?

Posted

技术标签:

【中文标题】如何为测试禁用 AWS 参数存储自动配置?【英文标题】:How to disable AWS parameter store autoconfiguration for tests? 【发布时间】:2019-04-04 10:23:33 【问题描述】:

我添加了spring-cloud-starter-aws-parameter-store-config 依赖项,如spring documentation 中所述。现在,对于单元测试,我想禁用参数存储配置。但做不到。

我尝试在 test/application.properties 中设置以下属性

 aws.paramstore.enabled=false

还尝试从AutoConfiguration 中排除AwsParamStoreBootstrapConfiguration.class,但仍然无法正常工作。

例外

引起:org.springframework.beans.BeanInstantiationException: 实例化失败 [com.amazonaws.services.simplesystemsmanagement.AWSSimpleSystemsManagement]: 工厂方法“ssmClient”抛出异常;嵌套异常是 com.amazonaws.SdkClientException:无法通过 区域供应商链。必须在构建器中提供显式区域 或设置环境以提供区域。在 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:582) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] ... 83个常用框架 省略引起:com.amazonaws.SdkClientException:无法找到 区域通过区域提供者链。必须提供明确的区域 在构建器或设置环境中提供区域。在 com.amazonaws.client.builder.AwsClientBuilder.setRegion(AwsClientBuilder.java:371) ~[aws-java-sdk-core-1.11.336.jar:na] 在 com.amazonaws.client.builder.AwsClientBuilder.configureMutableProperties(AwsClientBuilder.java:337) ~[aws-java-sdk-core-1.11.336.jar:na] 在 com.amazonaws.client.builder.AwsSyncClientBuilder.build(AwsSyncClientBuilder.java:46) ~[aws-java-sdk-core-1.11.336.jar:na] 在 com.amazonaws.services.simplesystemsmanagement.AWSSimpleSystemsManagementClientBuilder.defaultClient(AWSSimpleSystemsManagementClientBuilder.java:44) ~[aws-java-sdk-ssm-1.11.336.jar:na] 在 org.springframework.cloud.aws.autoconfigure.paramstore.AwsParamStoreBootstrapConfiguration.ssmClient(AwsParamStoreBootstrapConfiguration.java:53) ~[spring-cloud-starter-aws-parameter-store-config-2.0.0.RELEASE.jar:2.0.0.RELEASE]

【问题讨论】:

【参考方案1】:

我可以通过将属性 (aws.paramstore.enabled=false) 添加到 bootstrap.properties 文件测试资源文件夹来使用替代方法禁用 paramstore。这是一个更简单的解决方案

旧的解决方案

我能够找出解决方案。似乎SpringBootTest 甚至在测试配置类之前和加载application.properties 之前尝试加载ssmClient。解决方案是通过在@SpringBootTest 本身上指定属性来禁用paramstore

@SpringBootTest(classes = MyApp.class, properties = "aws.paramstore.enabled=false")

【讨论】:

以上是关于如何为测试禁用 AWS 参数存储自动配置?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Alexa 技能调用配置 MQTT (AWS IoT) 测试控制台?

如何为 <noscript> 标签编写自动化测试?

如何为开发目的禁用 Spring Cloud Stream 绑定?

如何为 AWS RDS 凭证创建配置文件并将其导入我的 AWS Lambda API?

如何为类型配置自动缩放:对象

如何为 IntelliJ IDEA 项目禁用或启用 Gradle / Maven 自动导入?