Я пытаюсь использовать разные свойства с огурцом для запуска интеграционных тестов для моего приложения с весенней загрузкой.Я могу заставить его работать, если я использую свойства по умолчанию, загруженные в основной класс Application.Однако когда я указываю @TestPropertySource для этого другого расположения свойств конфигурации, он все равно использует контекст приложения основного класса приложения.Таким образом, контекст приложения при выполнении теста такой же, как и при работе приложения на сервере.Я не хочу это.
Это веб-приложение, связанное с работой, использующее Spring Boot 1.5.18, Cucumber 4.2.2.
Структура каталогов: src / main / java для всех моих классов и пакетов java, src/ main / resources с application.properties и некоторыми другими, папка корневого уровня со свойствами ведения журнала среды и безопасности.Затем у меня есть src / test / java с моим кодом огурца и src / test / resources с моим измененным файлом application.properties, который я хотел бы использовать при выполнении теста.Я также хотел бы указать другую среду, безопасность, протоколирование файлов свойств конфигурации для тестирования.
Это мой класс ApplicationTest.Java, где я пытаюсь использовать разные источники свойств.
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class, webEnvironment =
SpringBootTest.WebEnvironment.RANDOM_PORT)
@TestPropertySource( value =
{"file:${env.dir}/deploy/acceptance/config/env.properties",
"file:${env.dir}/deploy/acceptance/config/AppConfig.properties",
"file:${env.dir}/deploy/acceptance/security/auth.properties",
"classpath:application-test.properties"})
public abstract class ApplicationTest {
public ApplicationTest() {
}
Это мой класс Cucumber4Test.Java
@RunWith(Cucumber.class)
@CucumberOptions(features = "src/test/resources",
plugin = {"pretty", "html:target/cucumber",
"junit:target/reports/cucumber.json"}, glue = { "com.test.packages.cucumber"
}, monochrome = true)
public class CucumberTest {
}
Я не уверен, что мне что-то не хватает в этих классах, поскольку я следовал руководству.Но, как я уже сказал, если я не установлю какие-либо источники свойств в своем классе ApplicationTest и запусту CucumberTest.java как junit в eclipse, или запусту mvn clean install, mvn test и т. Д., Тесты cucumber будут выполняться, как ожидается.
Я изучил вопросы здесь, пытаясь сделать кучу вещей, и мне кажется, что ничего не работает. Переопределить @PropertySource с помощью @TestPropertySource в Spring Boot
Загрузить другой application.yml в тесте SpringBoot
РЕДАКТИРОВАТЬ: причина, по которой я считаю, @TestPropertySource isnне работает из-за следующего: приоритет источника свойства в Spring.Когда я загружаю огурец в src / test / java, он загружает те свойства, которые я указал, но затем запускает приложение в папке src / main / java.Здесь его загрузка свойств по умолчанию в Application.java.В документации Spring указано, какие свойства загружаются в последнюю очередь, имеют приоритет, поэтому мой TestPropertySource перезаписывается при запуске приложения.
Мое рабочее решение: я хотел, чтобы огурец работал в Jenkins отдельно от нашего конвейера сборки и развертывания.Но не смог найти способ обойти стандарт моей работы для пути и структуры каталогов для конфигов и свойств.Итак, что я сделал:
1) Добавьте нужные мне свойства в classpath в src / test / resources.
2) Теперь это немного странно, но второй Application.java в src / test / java с @Propertysources отражает свойства, которые я хотел использовать.
3) В jenkins перед выполнением теста mvn я выполняю шаг перед сборкой.Эта оболочка просто перемещает src / test / java / package / with / Application.java в src / main / java / package / with / Application.java.Это переписывает обычный класс Application.java с другими свойствами.
4) запустить mvn test
5) прибыль