Тестирование конечной точки 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, записи в базе данных и т. Д.) В зависимости от того, что делает ваше приложение.

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