У меня есть серия «конвейерных» компонентов, которые взаимодействуют через очереди сообщений ActiveMQ. Каждый компонент использует Camel для обработки каждой из этих очередей как конечной точки. Каждый компонент использует один и тот же базовый шаблон:
В тех случаях, когда каждый компонент потребляет сообщения из входной очереди, обрабатывает сообщение (я), а затем помещает сообщения 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()
проверял наличие сообщения в определенной очереди или что конкретная очередь содержит сообщения?