Тестирование Camel с помощью MockEndpoints

У меня есть ряд «конвейерных» компонентов, которые все обмениваются данными через очереди сообщений ActiveMQ. Каждый компонент использует Camel для обработки каждой из этих очередей как конечной точки. Каждый компонент использует один и тот же базовый шаблон:

Basic component pattern

Когда каждый компонент потребляет сообщения из входной очереди, обрабатывает сообщение (я), а затем помещает 1+ сообщений в исходящую / выходную очередь. «Выходная» очередь становится «входной» очередью для следующего компонента в цепочке. Довольно простой.

Сейчас я пытаюсь засучить рукава и провести модульное тестирование для каждого компонента с помощью MockEndpoints , предоставляемых тестовым API Camel. Я проливал javadocs и несколько примеров на веб-сайте Camel, но мне трудно соединить все точки.

Мне кажется, что для каждого компонента часть моего модульного тестирования должна выполнить следующие три задачи:

  • Проверить, есть ли сообщения, ожидающие в определенной «входной» очереди
  • Извлеките эти сообщения и обработайте их
  • Отправьте новые сообщения в очередь «вывода» и убедитесь, что они попали туда

Я полагаю Мне нужно создать MockEndpoints для каждая очередь выглядит следующим образом:

@EndpointInject(uri = "mock:inputQueue")
protected MockEndpoint intputQueue;

@EndpointInject(uri = "mock:outputQueue")
protected MockEndpoint outputQueue;

Итак, теперь в моих тестовых методах JUnit я могу устанавливать ожидания и взаимодействовать с этими конечными точками:

@Test
public final void processMethodShouldSendToOutputQueue()
{
    Component comp = new Component();
    comp.process();

    outputQueue.assertIsSatisfied();
}

Я просто не понимаю, как правильно все подключить:

  • Как мне подключить comp к inputQueue и outputQueue MockEndpoints?
  • Для каждой MockEndpoint как настроить ожидания, чтобы assertIsSatisfied () проверяет, присутствует ли сообщение в определенной очереди или что конкретная очередь содержит сообщения?
17
задан Aleksandr Kravets 7 March 2013 в 16:21
поделиться