Как запустить maven фильтрацию из теста jUnit? - PullRequest
3 голосов
/ 25 октября 2011

Ситуация: у меня есть класс MyController, который работает с некоторыми внешними веб-сервисами.

public class MyController {
    private String integrationWebServiceURL;
}

URL-адрес веб-служб этого класса передается во время bean-компонента контроллера конфигурации в дескрипторе ( applicationContext.xml )

<bean id="myController"  class="com.mypath.MyController">
    <property name="integrationWebServiceURL" value="${integration.web.service.url}"/>
</bean>

Значение является динамическим, фактическое значение сохраняется в файле свойств application.properties

integration.web.service.url=${pom.integration.web.service.url}

Но это не конец - реальное значение сохраняется в файле проекта maven ( pom.xml ) с фильтрацией = true.

<pom.integration.web.service.url>http://mywebservices.com</pom.integration.web.service.url>

Итак, когда мы используем mvn install test значения из pom.xml копируются в соответствующие заполнители в application.properties, а затем тесты моего класса работают просто отлично.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"/applicationContext.xml"})
public class MyControllerTest {

}

Вопрос : Мне нужно запустить свой тест из IDE, чтобы иметь возможность играть с различными настройками и использовать функцию отладки IDE. Но если я просто запускаю этот тест из IDE без предварительной сборки Maven - тогда адрес моего веб-сервиса будет просто получен из application.properties и равен "$ {pom.integration.web.service.url}" (например, процесс фильтрации Maven не не работаю до теста). Как настроить Maven, Spring или jUnit для извлечения моего значения из pom.xml?

ПРИМЕЧАНИЕ : я знаю, что могу просто явно установить это значение в файлах application.properties или applicationContext.xml, которые используются Test-классом, но мне нужно извлечь эти значения из pom.xml.

Ответы [ 2 ]

0 голосов
/ 26 октября 2011

Лучшее решение - использовать IDE с поддержкой Maven, которая запускает mvn copy-resources , когда необходимо создать источник. Для Eclipse попробуйте m2e , для IDEA плагин Maven также должен это сделать.

Если по какой-то причине это невозможно, вы можете запустить цель вручную, например, в статическом кодовом блоке в общем тестовом коде (поэтому он всегда выполняется ровно один раз):

static {
    Process p = Runtime.getRuntime().exec( "mvn copy-resources" );
    IOUtils.copy( p.getInputStream(), System.out );
    p.waitFor();
}
0 голосов
/ 25 октября 2011

Просто запустите с Maven, как в:

mvn test

Тогда все должно идти с фильтрацией переменных pom. Вы можете иметь testResources для конкретных файлов свойств. Или приложениеContext-test.xml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...