#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, но мне пришлось прибегнуть к ручному методу, описанному в решении…