исключить классы BootstrapConfiguration при весенней загрузке для тестов - PullRequest
0 голосов
/ 29 января 2020

У меня есть приложение, которое считывает свои свойства конфигурации из экземпляра Zookeeper.

Существует один внутренний модуль spring-boot-auto-configure, который помогает читать информацию из экземпляра zookeeper.

Нам нужно установить информацию об экземпляре zookeeper в файле bootstrap.properties.

spring.factories из модуля автоконфигурации

org.springframework.cloud.bootstrap.BootstrapConfiguration=\
  com.company.name.ZooKeeperAutoConfig

В классах автоконфигурации также есть тот же файл

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.company.name.XyzAutoConfig

Поэтому, когда приложение запускается, оно получает информацию от bootstrap .properties и подключается к экземпляру zookeeper через модуль авто-конфигурации.

Я хочу написать тесты для Уровень контроллера Spring API с использованием аннотации @WebMvcTest. Но даже в тестах он пытается подключиться к экземпляру zookeeper, чего я не хочу. Я не хочу, чтобы модульные тесты общались с внешними сервисами.

Я хочу исключить конфигурацию zookeeper bootstrap во время тестов.

Несколько способов, которые я безуспешно пытался.

1) Я пытался исключить подобное, но все равно он подключается к Zookeeper

@TestPropertySource(properties=
{"spring.autoconfigure.exclude=com.company.name.ZooKeeperAutoConfig"})

2) Я создал bootstrap -test.properties и добавлены некоторые фиктивные значения для свойств zookeeper. И в тесте я добавил @ActiveProfile("test"). Он пытается подключиться к zookeeper через фиктивные значения и в конце концов терпит неудачу.

Есть ли способ, которым я могу полностью игнорировать / исключать конфигурацию Zookeeper bootstrap. Приложение не должно знать, что для работы ему необходимо подключиться к zookeeper.

Возможно ли исключить BootstrapConfiguration в тестах или нет?

Пожалуйста, дайте мне знать, если требуется дополнительная информация.

1 Ответ

0 голосов
/ 29 января 2020

Как идея - вы пытались поместить аннотацию @Conditional в свой класс автоматической настройки ZooKeeper?

@Configuration
@ConditionalOn....
public class com.company.name.ZooKeeperAutoConfig  {
}

Я не могу проверить это самостоятельно, но, возможно, условное свойство может быть релевантным или, org.springframework.boot.autoconfigure.condition.ConditionalOnNotWebApplication, который должен совпадать, если контекст приложения не является контекстом веб-приложения (но тестирует контекст приложения) актуально для испытаний)

...