Автоматически добавлять свойства при запуске 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 не может сделать это для меня автоматически...
Ответы
Ответ 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");
}