Тестирование конечной точки Camel Spring Boot CXF
У меня есть следующие конечные точки и маршрут.
@Bean
public CxfEndpoint requestEndpoint() {
CxfEndpoint endpoint = new CxfEndpoint();
endpoint.setAddress(SERVICE_ADDRESS);
endpoint.setServiceClass(Service.class);
endpoint.setWsdlURL(WSDL_LOCATION);
endpoint.setBus(bus);
endpoint.setProperties(endpointProperties);
return endpoint;
}
А также
from("cxf:bean:requestEndpoint")
//Custom logic with various outbound routes
.choice()
....
.to("direct:route1")
....
.to("direct:route2")
Я хочу проверить это. Различные входные данные должны быть направлены на различные маршруты.
@RunWith(CamelSpringBootRunner.class)
@SpringBootTest
@MockEndpoints
@Configuration
public class RequestRouteTest extends CamelTestSupport {
@Autowired
private ProducerTemplate producerTemplate;
@EndpointInject(uri = "mock:direct:route1")
private MockEndpoint mockCamel;
@Test
public void myTest() throws Exception {
mockCamel.expectedMessageCount(1);
producerTemplate.sendBody("cxf:bean:requestEndpoint", bodyForRoute1);
mockCamel.assertIsSatisfied();
}
}
Но в этом случае у меня есть следующая ошибка:
Причина: java.net.ConnectException: ConnectException, вызывающее http://myurl/: соединение отклонено (соединение отклонено)
это логично, я не запускал приложение.
Затем я пытаюсь заменить конечную точку cxf на макет:
MockEndpoint mockEndpoint = getMockEndpoint("mock:cxf:bean:requestEndpoint");
producerTemplate.sendBody(mockEndpoint, bodyForRoute1);
И я получил
Утверждение: mock://direct:route1 выполняется - FAILED
и исключение (java.lang.AssertionError: mock://direct:route1 Количество полученных сообщений. Ожидаемое: <1>, но было: <0>), поскольку мой код маршрута не был вызван.
Как правильно проверить маршрут? Я хотел бы попробовать два интересных способа:
1) Тестирование с реальной конечной точкой http (это позволяет тестировать ранние фазы запроса - например, запросы с неверным xml)
2) Изолированный тест, когда полезная нагрузка POJO находится в теле сообщения.
Буду признателен, если найдется решение моей проблемы
1 ответ
Тест маршрута в вашем вопросе использует тестовый набор Camel. Это отличный инструмент для проведения "модульных тестов" для ваших маршрутов Camel, т. Е. № 2 ваших вопросов.
В этих тестах вы обычно используете AdviceWith для замены реальных конечных точек на ложные, потому что вы хотите проверить правильность маршрутизации сообщений.
См. Связанный ответ в комментарии @Bedlas, чтобы заменить конечную точку CXF прямой конечной точкой, чтобы ваш тест работал.
Если вы хотите проводить тесты с реальными конечными точками, т. Е. № 1 из ваших вопросов, вам следует подумать об использовании интегрированных тестовых сред, таких как Citrus.
С такими фреймворками вы пишете тесты на работающий экземпляр вашего приложения. В вашем случае вы бы отправили запрос HTTP или SOAP к реальной конечной точке CXF вашего работающего приложения, и у вас есть масса возможностей проверить результат (проверить очереди JMS, записи в базе данных и т. Д.) В зависимости от того, что делает ваше приложение.