Автоматически добавлять свойства при запуске JUnit в Eclipse

17

Для запуска моих модульных тестов на моем Eclipse мне нужно установить некоторые свойства для виртуальной машины.

Таким образом, когда я впервые запускаю свой тест JUnit, я перехожу в «Open Run Dialog», затем в настройке JUnit для этого теста я перехожу на вкладку «Аргументы» и помещаю все, что мне нужно, в текст «аргументы VM» область.

Есть ли способ автоматически добавить набор свойств при запуске моего JUnit, поэтому я смогу только щелкнуть правой кнопкой мыши на тестовом классе и нажать «Запустить как & gt; Junit Test» для запуска теста

Техническая информация: Eclipse 3.3.2, JUnit 4, Java 5

Изменить , в ответ от Аарона Дигуллы:

Эти свойства используются в конфигурационных файлах Spring *. Таким образом, я не могу использовать идею, данную Аароном, поскольку Spring будет инициализирован до запуска теста.

В дополнение к этому, мне просто нужно знать, могу ли я легко достичь этого в Eclipse. Таким образом, решение не должно влиять на компиляцию приложения вне Eclipse, так как мое приложение, наконец, будет скомпилировано (и протестировано) Maven2.

* для нескольких тестов «unit» действительно нужна моя конфигурация Spring. Хорошо, я знаю, что это не настоящие модульные тесты; o)

Изменить 2 . Фактически, я действительно начал настройку Spring тестовой единицей. Таким образом, перед запуском Spring я проверяю свойства System, и если мои свойства не установлены, тогда я даю им требуемое значение ...

Однако, я немного разочарован тем, что Eclipse не может сделать это для меня автоматически ...

    
задан romaintaz 11.03.2009 в 09:09
источник
  • Просто, чтобы быть откровенным в отношении весенних испытаний. О чем говорит OP при использовании пружины, является «RunWith (SpringJUnit4ClassRunner.class) и ContextConfiguration» начнется весна до того, как будет запущен обычный Junit Before и BeforeClass, поэтому настройки системных свойств в них не будут работать. –  sMoZely 01.12.2011 в 19:13

5 ответов

7

Мое решение - создать абстрактный тестовый базовый класс для всех тестов в проекте, который расширяет TestCase. Он должен быть абстрактным, поэтому автомат для поиска единиц измерения не будет его рассматривать.

В статическом блоке кода этого класса я задал все необходимые мне свойства. Это гарантирует, что код запускается один раз и только один раз и запускается перед любым тестом в моем проекте.

[EDIT] Вы говорите, что Spring инициализируется до запуска тестов. Это ошибка в вашем проекте: это должны быть те тесты, которые инициализируют Spring. В противном случае вы всегда столкнетесь с проблемой, что вам нужно проверить что-то вне вашего контроля.

Поэтому я предлагаю переместить исходный код Spring в место, где вы можете вызвать его в тот момент, когда среда готова.

Кроме того, убедитесь, что среда настроена правильно в setUp () и выдает ошибку, если свойство отсутствует. Таким образом, вы, по крайней мере, знаете, почему тесты не удастся позже. Но я все же предпочитаю иметь полный контроль, когда какая подсистема оживает. Все остальное просто просит бедствия.

    
ответ дан Aaron Digulla 11.03.2009 в 09:48
источник
  • Я не могу использовать вашу идею, как объяснялось в моем Редактировании (я не уменьшаю его, так как это не плохая идея, однако) ... –  romaintaz 11.03.2009 в 10:35
  • Я согласен с статическим кодом блока init. Существует еще одна альтернатива: @BeforeClass для метода, в котором вы можете инициализировать свои системные переменные. –  zeratul021 09.08.2011 в 14:50
26

Вы можете попробовать это - перейдите к

 Window->Preferences->Java->Installed JREs

ans выберите JVM в использовании, чем установите prameter по умолчанию VM, например

  -DrunningInEclipse

Чем вы можете проверить в своей тестовой камере:

   System.getProperty("runningInEclipse") != null
    
ответ дан siddhadev 11.03.2009 в 11:26
источник
  • Это работает! Большой! –  Wolfgang 18.01.2011 в 12:01
  • Фантастический! Благодарю. –  Bill K 07.08.2012 в 23:26
  • Есть ли способ указать это для каждого проекта? –  Stewart 29.03.2016 в 00:27
7

Когда я хочу установить некоторые записи свойств для моего теста junit, я реализую следующие

protected void setUp() throws Exception {
        super.setUp();

        System.setProperty("Property1", "value1");
        System.setProperty("Property2", "value2");
}

Свойства задаются до того, как тестовый метод называется

EDIT: Вы также можете прочитать свойства из файла и в свойствах системы

    
ответ дан Markus Lausberg 11.03.2009 в 10:47
источник
  • То же замечание, что и для ответа Аарона Дигуллы. Он не будет работать, если свойства используются Spring ... –  romaintaz 11.03.2009 в 10:58
  • Вы должны инициализировать все значения и объекты внутри метода установки. В противном случае обновите тестовые файлы. –  Markus Lausberg 11.03.2009 в 11:52
1

Я никогда не понимал, почему конфигурации запуска имеют способ определить переменные среды, но единственным способом добавления системного свойства является добавление аргументов vm.

То, как я работал над этим, заключается в том, чтобы проверить тесты (или базовый класс абстрактных тестов) на наличие необходимых свойств, если их там нет, я загружаю их из файла .properties в пути к классам.

Это работает, поскольку я все еще могу переопределить их или указать их из ANT или Maven, но также может «щелкнуть правой кнопкой мыши» - & gt; Run As - & gt; Junit Проверьте отдельные тестовые файлы.

edit: вот пример получения Spring для необязательной загрузки файла свойств таким же образом, как описано выше:

<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="database.properties"/>
        <property name="ignoreResourceNotFound" value="true" />
        <property name="systemPropertiesMode">
            <util:constant static-field="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.SYSTEM_PROPERTIES_MODE_OVERRIDE" />
        </property>
</bean>
    
ответ дан chillitom 11.03.2009 в 11:21
источник
1

Согласованный использованный метод таким образом в одном из моих тестов junit и он работал


     @BeforeClass
        public static void setupProperties() {
            System.setProperty("catalina.base", "C:\sam-tomcat-7.0.42");
        }

    
ответ дан Harsh Gupta 19.01.2014 в 05:58
источник
  • Я знаю это решение, но оно не соответствовало моим требованиям. Я хотел иметь решение только для Eclipse. Используя это, это повлияет на сборку по умолчанию Maven (т.е. вне среды IDE). Кроме того, он работает только для одного класса (или вам нужно, чтобы все ваши тесты расширили класс, который определяет этот @BeforeClass). –  romaintaz 19.01.2014 в 18:57