Автоматически добавлять свойства при запуске JUnit в Eclipse - PullRequest
17 голосов
/ 11 марта 2009

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

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

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

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


Редактировать относительно ответа Аарона Дигуллы:

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

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

* несколько "модульных" тестов действительно требуют запуска моей конфигурации Spring. Хорошо, я знаю, что это не настоящие юнит-тесты; о)

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

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

Ответы [ 5 ]

27 голосов
/ 11 марта 2009

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

 Window->Preferences->Java->Installed JREs

и выберите используемую JVM, а затем установите параметр «ВМ по умолчанию», например

  -DrunningInEclipse

Чем вы можете проверить из своего TestCase:

   System.getProperty("runningInEclipse") != null
7 голосов
/ 11 марта 2009

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

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

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

Свойства устанавливаются до того, как метод испытания будет вызван

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

7 голосов
/ 11 марта 2009

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

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

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

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

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

1 голос
/ 19 января 2014

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



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

1 голос
/ 11 марта 2009

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

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

Это работает, поскольку я все еще могу переопределить их или указать их из ANT или Maven, но также могу «щелкнуть правой кнопкой мыши» -> «Запуск от имени» -> «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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...