@WebMvcTest не находит buildProperties - PullRequest
       60

@WebMvcTest не находит buildProperties

0 голосов
/ 15 февраля 2019

У меня есть рабочие тесты JUnit для моих контроллеров MVC.Теперь я хотел, чтобы номер сборки отображался в нижнем колонтитуле каждой страницы, поэтому я добавил следующий div в свои шаблоны тимилиф:

<div class="versionInfo">Version <span th:text="${@buildProperties.getVersion()}"></span></div>

Теперь тест не пройден:

Вызвано: org.springframework.beans.factory.NoSuchBeanDefinitionException: недоступен bean-компонент с именем buildProperties

Я пытался добавить его как макет безрезультатно:

@MockBean
private BuildProperties buildProperties;

Или следуя этому совету (см. Мой комментарий под ответом).

Так как же мне заставить мои тесты снова работать с BuildProperties?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Когда вы пытаетесь получить доступ к бину следующим образом: ${@buildProperties.getVersion()} на самом деле это выражение SpEL для доступа к бину через BeanReference.К сожалению, у него нет значения по умолчанию, и вместо возврата null он выдает исключение, если бин не может быть найден.

Я не знаю простого способа проверить, существует ли бин в контексте через SpEL.

Так что я думаю, что лучшее решение, если вы создадите вложенный тестовый класс конфигурации и определите там компонент по умолчанию BuildProperties.

@TestConfiguration
public static class TestConfig {    
  @Bean 
  BuildProperties buildProperties() {
    return new BuildProperties(new Properties());
  }
}

Или вы можете создать его как отдельный класс и использовать @Import(TestConfig.class), если вам нужна эта дополнительная конфигурация в нескольких тестовых классах.

0 голосов
/ 15 февраля 2019

Если вы используете gradle, просто добавьте это в свой файл build.grandle:

SpringBoot { buildInfo() }

После настройки модуля spring-boot-maven-plugin вы можете собрать приложение и получить доступ к информации о сборке приложения.Объект BuildProperties внедряется Spring (@Autowired)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...