Как установить переменную среды или системное свойство в весенних тестах?

Я хотел бы написать несколько тестов, которые проверяют конфигурацию XML Spring развернутой WAR. К сожалению, некоторые компоненты требуют, чтобы были установлены некоторые переменные среды или системные свойства. Как я могу установить переменную окружения до инициализации пружинных бинов при использовании удобного стиля тестирования с @ContextConfiguration?

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:whereever/context.xml")
public class TestWarSpringContext { ... }

Если я настраиваю контекст приложения с помощью аннотаций, я не вижу ловушки, где я могу что-то сделать до инициализации весеннего контекста.

67 голосов | спросил Hans-Peter Störr 3 J000000Tuesday12 2012, 12:16:06

5 ответов


0

Вы можете инициализировать свойство System в статическом инициализаторе:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:whereever/context.xml")
public class TestWarSpringContext {

    static {
        System.setProperty("myproperty", "foo");
    }

}

Статический код инициализатора будет выполнен до того, как будет инициализирован контекст приложения Spring.

ответил Jimmy Praet 27 PM00000060000001731 2012, 18:48:17
0

Правильный способ сделать это, начиная с Spring 4.1, это использовать аннотацию @TestPropertySource.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:whereever/context.xml")
@TestPropertySource(properties = {"myproperty = foo"})
public class TestWarSpringContext {
    ...    
}

См. @TestPropertySource в весенних документах . и Javadocs .

ответил Raman 3 MaramThu, 03 Mar 2016 07:45:23 +03002016-03-03T07:45:23+03:0007 2016, 07:45:23
0

Можно также использовать тест ApplicationContextInitializer для инициализации системного свойства:

public class TestApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext>
{
    @Override
    public void initialize(ConfigurableApplicationContext applicationContext)
    {
        System.setProperty("myproperty", "value");
    }
}

, а затем настройте его в тестовом классе в дополнение к расположению конфигурационного файла Spring:

@ContextConfiguration(initializers = TestApplicationContextInitializer.class, locations = "classpath:whereever/context.xml", ...)
@RunWith(SpringJUnit4ClassRunner.class)
public class SomeTest
{
...
}

Таким образом, дублирования кода можно избежать, если для всех модульных тестов необходимо установить определенное системное свойство.

ответил anre 23 FriEurope/Moscow2016-12-23T20:21:31+03:00Europe/Moscow12bEurope/MoscowFri, 23 Dec 2016 20:21:31 +0300 2016, 20:21:31
0

Вы можете установить системные свойства в качестве аргументов виртуальной машины.

Если ваш проект - проект maven, вы можете выполнить следующую команду во время работы тестового класса:

mvn test -Dapp.url="https://stackoverflow.com"

Тестовый класс:

public class AppTest  {
@Test
public void testUrl() {
    System.out.println(System.getProperty("app.url"));
    }
}

Если вы хотите запустить отдельный тестовый класс или метод в Eclipse, тогда:

1) Перейти в Run -> Запустить конфигурацию

2) С левой стороны выберите свой тестовый класс в разделе Junit.

3) выполните следующие действия:

 введите описание изображения здесь

ответил Joby Wilson Mathews 3 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 03 Sep 2018 12:57:34 +0300 2018, 12:57:34
0

Если вы хотите, чтобы ваши переменные были действительными для всех тестов, у вас может быть файл application.properties в каталоге ресурсов тестирования (по умолчанию : src/test/resources), который будет выглядеть примерно так:

MYPROPERTY=foo

Затем он будет загружен и использован, если у вас нет определений с помощью @TestPropertySource или аналогичного метода - точный порядок загрузки свойств можно найти в главе документации Spring

ответил blalasaadri 2 MarpmFri, 02 Mar 2018 13:59:57 +03002018-03-02T13:59:57+03:0001 2018, 13:59:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132