Тестирование конечной точки Camel Spring Boot CXF - PullRequest
0 голосов
/ 09 июня 2018

У меня есть следующие конечные точки и маршрут.

  @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 Ответ

0 голосов
/ 12 июня 2018

В тесте маршрута в вашем вопросе используется Camel test kit .Это отличный инструмент для проведения «юнит-тестов» для ваших маршрутов Camel, т. Е. № 2 ваших вопросов.

В этих тестах вы обычно используете AdviceWith до , заменяя реальные конечные точки на ложные, потому что вы хотите проверить правильность маршрутизации сообщений .

См. Связанный ответ в комментарии @Bedlas, чтобы заменить конечную точку CXF прямой конечной точкой для выполнения теста.

Если вы хотите провести тестирование с реальными конечными точками , т. е. № 1 из ваших вопросов, вы должны рассмотреть возможность использования интеграционных тестовых сред, таких как Citrus .

С такими платформами вы пишете тесты для работающего экземпляра вашего приложения.В вашем случае вы бы отправили запрос HTTP или SOAP к реальной конечной точке CXF вашего работающего приложения, и у вас есть масса возможностей проверить результат (проверить очереди JMS, записи в базе данных и т. Д.) В зависимости от того, что делает ваше приложение.

...