Обычно интеграция с AWS хранилищем параметров должна быть отключена в интеграционных тестах для простоты и производительности. Вместо этого загрузите свойства теста из файла (например, src/test/resources/test.properties
)
@SpringBootTest(properties = "aws.paramstore.enabled=false")
@TestPropertySource("classpath:/test.properties")
public class SampleTests {
//...
}
Если отдельным тестам необходимо проверить интеграцию с AWS хранилищем параметров, используйте Testcontainers и LocalStack простой в использовании локальный AWS стек для Docker.
Добавить класс конфигурации, создающий пользовательский ssmClient
компонент типа AWSSimpleSystemsManagement
, настроенный на использование LocalStack вместо значения по умолчанию один объявлен в org.springframework.cloud.aws.autoconfigure.paramstore.AwsParamStoreBootstrapConfiguration
с использованием реального AWS хранилища параметров.
@Configuration(proxyBeanMethods = false)
public class AwsParamStoreBootstrapConfiguration {
public static final LocalStackContainer AWS_SSM_CONTAINER = initContainer();
public static LocalStackContainer initContainer() {
LocalStackContainer container = new LocalStackContainer().withServices(SSM);
container.start();
Runtime.getRuntime().addShutdownHook(new Thread(container::stop));
return container;
}
@Bean
public AWSSimpleSystemsManagement ssmClient() {
return AWSSimpleSystemsManagementClientBuilder.standard()
.withEndpointConfiguration(AWS_SSM_CONTAINER.getEndpointConfiguration(SSM))
.withCredentials(AWS_SSM_CONTAINER.getDefaultCredentialsProvider())
.build();
}
}
Поскольку AwsParamStorePropertySourceLocator
загружен контекстом bootstrap Spring Spring, вам необходимо добавить класс конфигурации в контекст bootstrap, добавив в файл src/test/resources/META-INF/spring.factories
следующая запись
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.example.test.AwsParamStoreBootstrapConfiguration
Тот же подход можно использовать для насмешки ssmClient
с использованием Mockito.