Проблемы при тестировании Camel с Spring config

#unit-testing #spring #apache-camel

#модульное тестирование #spring #apache-camel

Вопрос:

У меня есть маршруты, определенные в CamelRoutes.xml , и я хотел бы протестировать их, используя технику переноса, описанную внизу http://camel.apache.org/mock.html.

Мой CamelRoutes.xml

  <route autoStartup="true"  xmlns="http://camel.apache.org/schema/spring">
        <from uri="direct:start"/>
        <to uri="direct:end"/>
    </route>
  

Итак, я создал CamelRoutesTest.xml содержащий:

 <import resource="CamelRoutes.xml"/>
<bean id="mockAllEndpoints" class="org.apache.camel.impl.InterceptSendToMockEndpointStrategy"/>
  

но я не уверен, как создать тест, который одновременно загружает spring xml И предоставляет доступ к фиктивным конечным точкам.

Если я использую..

 @ContextConfiguration( locations=("/CamelRoutesTest"))
public class CamelTest extends AbstractJUnit38SpringContextTests

}
  

тогда я понятия не имею, как получить фиктивные конечные точки

Если я использую..

 public class CamelTest extends CamelTestSupport

}
  

тогда я не знаю, как загрузить мой контекст camel..

Кажется, я не могу найти пример теста на веб-сайте, который использует CamelTestSupport И загружает маршруты из spring xml.

Ответ №1:

Том, ты уже разместил это в списке рассылки Camel. Я предлагаю вам написать это, когда вы также разместите вопрос здесь.

Ответ уже опубликован здесь http://camel.465427.n5.nabble.com/Problems-testing-Camel-with-Spring-config-tp4267754p4267754.html

Комментарии:

1. Обычно я обновляю свой вопрос здесь, если / когда получу ответ в другом месте. На данный момент мне все еще не хватает достойного примера того, как правильно смоделировать мой маршрут, чтобы мои тесты не попали во внешние системы.

Ответ №2:

Решаются с помощью:

 public class CamelTest extends CamelSpringTestSupport {  

    @Override
    protected AbstractXmlApplicationContext createApplicationContext() {
        return new ClassPathXmlApplicationContext("/CamelRoutesTest.xml");
    }

    @Test
    @DirtiesContext
    public void discover() throws Exception {

        getMockEndpoint("mock:my.route.out").expectedMessageCount(1);

        template.sendBody("direct:my.route.in", FileUtils.slurpClassPathFile("/samples/sample.data.xml"));

        assertMockEndpointsSatisfied();

    }


}
  

Ответ №3:

Спасибо за это решение, @Tom !

Мне также было трудно заставить Camel работать с моими тестами JUnit на базе Spring, проблема в том, что предлагаемый CamelSpringJUnit4ClassRunner теперь перемещен с camel-spring.jar в отдельный модуль, camel-spring-test.jar , который недоступен в стандартном camel-дистрибутиве начиная с 2.9.2.

Поэтому я не могу использовать @RunWith, но мне пришлось прибегнуть к ручному методу, описанному в решении…