#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. сработало как по волшебству! Я дошел до той части, где я добавил новый ресурс каталога, но не знал о фильтрации. Большое спасибо!