Подтвердить что ты не робот

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

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

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

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

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


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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

 Window->Preferences->Java->Installed JREs

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

  -DrunningInEclipse

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

   System.getProperty("runningInEclipse") != null

Ответ 3

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

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

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

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

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

Ответ 4

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

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

Это работает, поскольку я все еще могу переопределить их или указать их из 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>

Ответ 5

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


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