Как установить значения свойств во время тестирования для тестов на основе CamelSpringTestSupport

Я создаю модуль ServiceMix, который состоит из маршрута Camel.

В моем файле beans.xml есть:

<osgix:cm-properties id="companyProps"
    persistent-id="com.company.integration">
</osgix:cm-properties>

<ctx:property-placeholder location="
    file:${karaf.base}/etc/com.company.integration.cfg
" />

Это означает, что я могу определять другие элементы, используя свойства из файла, например:

<http-conf:conduit name="*.http-conduit">
    <http-conf:authorization>
        <security:UserName>${username}</security:UserName>
        <security:Password>${password}</security:Password>
    </http-conf:authorization>
</http-conf:conduit>

Я также могу получить доступ к свойствам в моих классах Java, если я создаю компонент и внедряю его:

<bean id="myConfig" class="com.company.integration.MyConfig">
    <osgix:managed-properties persistent-id="com.company.integration" />
</bean>

Проблема в том, когда я пишу свои юнит-тесты. В настоящее время я использую копию файла beans.xml с тестовыми значениями, но, конечно, я бы хотел использовать настоящий beans.xml и предоставить значения для свойств.

public class myTest extends CamelSpringTestSupport
{
@Override
protected AbstractXmlApplicationContext createApplicationContext()
{
    return new ClassPathXmlApplicationContext(new String[] {
            "/META-INF/spring/beans.xml"
        ,   "/META-INF/spring/test.xml"
    });

}   
}

Я хотел бы избавиться от test.xml и предпочтительно загрузить свойства test из файла свойств. Я видел некоторые ссылки на PropertyComponent, но я не могу заставить это работать:-(

1 ответ

Решение

В нашей организации мы отделяем нашу конфигурацию spring-osgi от нашей конфигурации bean-компонента.

В нашей конфигурации spring-osgi у нас будет следующее:

<osgix:cm-properties id="companyProps" persistent-id="com.company.integration">
    <prop key="name">value</prop>
    <prop key="name">value</prop>
    ...
</osgix:cm-properties>

а также любые специфичные для osgi конфигурации (такие как регистрация службы, события и т. д.)

В нашей конфигурации Spring-bean мы определяем все bean-компоненты, которые мы МОЖЕМ использовать вне контейнера osgi, включая маршруты / контекст верблюдов и т. Д.

Для нашего тестирования мы запускаем ClassPathXmlContext, используя наше определение пружинного компонента и конфигурацию тестовой пружины, которая содержит следующее:

<ctx:property-placeholder location="classpath*:test.properties" />

Как и любые насмешки, которые нам нужны для конкретных бобов.

Надеюсь это поможет.

Другие вопросы по тегам