Spring boot: ссылка на свойства pom из application.properties в тестах

#spring #spring-boot #maven #junit5

Вопрос:

Это мой src / test /resources /application.yml:

 app:
  name: Configuration And Profiles
  desc: This is an app to try out ${app.name}
  version: @modelVersion@
 

Я просто пытаюсь получить версию модели из моего файла pom:

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
...
 

Тест:

 @WebMvcTest(ProfilingController.class)
public class RestControllerTest {

    @Value("${app.version}")
    private String version;

    @Test
    public void testHelloEnv() throws Exception {

        System.out.println("VERSION: "   version);

    }
}
 

Ошибка, которую я получаю:

 org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token
found character '@' that cannot start any token. (Do not use @ for indentation)
 in 'reader', line 4, column 12:
      version: @modelVersion@
               ^
 

Самое смешное, что я получил то же свойство в файле src/main/resource/application.yml, но в этом случае, когда я запускаю приложение в обычном режиме, version: @modelVersion правильно заполняется из pom, и я могу получить версию без проблем. Это похоже на приложение test.yml не знает о pom.xml

есть мысли?

ПРИМЕЧАНИЕ: использование «@modelVersion» между одинарными кавычками предотвращает ошибку, но я получаю строку @modelVersion вместо ее значения 4.0.0

Технологии:

  • Версия Spring boot: 2.5.6
  • Версия Junit: Jupiter (5)
  • Версия Maven: 3.8.3

Комментарии:

1. Зачем вам нужна modelVersion в тесте весенней загрузки?

2. нет, мне это не нужно. Я просто случайно выбрал это свойство в качестве доказательства концепции

Ответ №1:

Как описано в документации, фильтрация ресурсов включается spring-boot-starter-parent

Это не относится к свойствам ‘test’, поэтому, если вам это нужно, вам нужно включить фильтрацию в тестовых ресурсах:

в вашем pom.xml

     <build>
        <testResources>
            <testResource>
                <directory>src/test/resources</directory>
                <filtering>true</filtering>
            </testResource>
        </testResources>
    ...
    </build>
 

Комментарии:

1. сработало как по волшебству! Я дошел до той части, где я добавил новый ресурс каталога, но не знал о фильтрации. Большое спасибо!