Приложение Spring - переопределение свойств приложения по свойствам теста - PullRequest
0 голосов
/ 10 июля 2019

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

У меня есть приложение весенней загрузки App1, которое имеет следующие свойства db в основном и тестовом пакетах соответственно:

src/main/resources/app1.properties

src/test/resources/app1-test.properties

Давайте предположим, что app1.properties содержат свойства oracle db, а app1-test.properties содержат свойства h2 db

Обычно, когда я запускаю приложение App1, оно выбирает свойства из app1.properties

Мое требование заключается в том, чтобы при создании тестового экземпляра приложения (скажем, TestApp1) должен быть выбран app1-test.properties, а не app1.properties.

Как мне этого добиться? Пожалуйста, помогите.

Ответы [ 4 ]

2 голосов
/ 10 июля 2019

Если вы имеете в виду, когда запускаете тестовые классы для своего приложения, вы можете включить аннотацию @ActiveProfiles ("test") над классом, чтобы включить конфигурацию app1-test.properties.

Верхняя частькласс должен выглядеть примерно так:

    @ActiveProfiles("test")
    @ExtendWith(SpringExtension.class)
    @SpringBootTest(classes = Application.class, webEnvironment = WebEnvironment.RANDOM_PORT)
    public class YourTestClassName {
0 голосов
/ 10 июля 2019

Как ответил @domorecalculus, стандартный способ сделать это - использовать профили Spring.Я советую вам больше копаться в Spring Profiles, это даст вам гибкость не только на уровне конфигурации, но и на уровне кода, например, вы можете аннотировать класс с помощью @Profile (value = "dev"), так что класс будет загруженпри запуске приложения только в режиме разработки.Вы можете думать об этом как о реализации шаблона стратегии, но вы не можете изменить профиль во время выполнения.

Возвращаясь к вашему вопросу, я делал это следующим образом:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = MyApp.class)
@ActiveProfiles("test")
public class TestMyService { 
 .....
}
0 голосов
/ 10 июля 2019

Поместите файл свойств в то же место, что и application.property, и следуйте соглашению об именах appliaction- {profile} .properties, например application-dev.properties, application-test.properties, application-prod.properties

Ив application.properties установите spring.profiles.active = test для использования тестовых свойств, а для свойств dev вы можете установить spring.profiles.active = dev, и по умолчанию application.properties будет выбран

0 голосов
/ 10 июля 2019

@ domorecalculus ответ выглядит хорошо. Хотя, поскольку я на самом деле никогда не использовал @ActiveProfile, я опубликую альтернативу на случай, если это не то, что вы ищете:

@RunWith(SpringRunner.class)
@TestPropertySource(locations = "classpath:application-test.properties")
@SpringBootTest
public class InvalidTransactionTests {
    ...
}

Одним из преимуществ может быть то, что эта аннотация отделяет ваш src/main/test от вашего src/main/java полностью. Недостатком (я могу ошибаться в этом) может быть то, что базовое имя application.properties неоднозначно, учитывая, что этот файл уже существует в src/main/java.

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