2015-01-15 3 views
0

Попытка выяснить, как наилучшим образом выполнить тестирование модуля http:outbound-gateway в потоке интеграции Spring.Тест интеграции модулей Spring http: outbound-gateway

Вот что наш шлюз выглядит следующим образом:

<int-http:outbound-gateway id="gateway" 
          request-channel="registrationQueue" 
          message-converters="jsonMessageConverter" 
          url-expression="@urlGenerator.resolve()" 
          http-method="POST" 
          expected-response-type="javax.ws.rs.core.Response" 
          reply-channel="nullChannel" 
          error-handler="httpResponseErrorHandler"/> 

В частности, мы хотим ..

  1. Утверждай сериализации объектов направляются; сделайте message-converters правильно обрабатывать сообщения, исходящие от request-channel?
  2. Проверьте обработку ответа от стороннего сервиса; что такое поведение при различных ответах (ожидается & неожиданно) и ошибки (внутренние & внешние)?

У нас есть несколько модульных тестов, которые издеваются над конечными точками и утверждают, что шаги нашего рабочего процесса интеграции ведут себя так, как ожидалось. Что-то вроде следующего:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = {"classpath:test-config.xml"}) 
public class FileRegistrationWorkflowTest { 

    ... 

    @Autowired 
    private MessageChannel fileFoundChannel; 

    @Autowired 
    private QueueChannel testRegistrationQueue; 

    ... 

    @Test 
    public void shouldQueueRegistrationForFileWithEntityId() { 
     // Given 
     mockFileLookupService(FILE_ID, FILENAME_WITH_ENTITY_ID); 
     // When 
     fileFoundChannel.send(MessageBuilder.withPayload(FILE_ID).build()); 
     // Then 
     Message<?> message = testRegistrationQueue.receive(); 
     assertThat(message, hasPayload(expected)); 
    } 

} 

Этот метод тестирования отлично подходит для шагов по технологическому процессу. Наша проблема заключается в проверке шлюзов конечной точки.

  • Мы не можем высмеивать http:outbound-gateway, тогда мы его не тестируем.
  • Мы не хотим развертывать реальный HTTP-сервис для взаимодействия, это скорее интеграционный тест.
  • Третий сторонний сервис разрешен только url-expression, поэтому нет весны для издевательства.

Возможно, мы сможем перехватить HTTP-запрос Spring пытается отправить?

ответ

1

В framework tests используется DirectFieldAccessor, чтобы заменить конечную точку RestTemplate на макет (на самом деле заглушку). Однако это не проверяет преобразователи.

Вы можете стать еще более сложным, где можно протестировать реальный RestTemplate; просто получите ссылку на него (с SI TestUtils.getPropertyValue() или DirectFieldAccessor) и настройте его, как описано в разделе Spring Framework documentation.

Вы можете получить ссылку на обработчик с именем бобов endpointId.handler.

+0

Удивительный, звучит как то, что я ищу, спасибо Гэри. –

Смежные вопросы