У меня есть серия "конвейерных" компонентов, которые все общаются через очереди сообщений ActiveMQ. Каждый компонент использует Camel для обработки каждой из этих очередей в качестве конечной точки. Каждый компонент использует один и тот же базовый шаблон:
Если каждый компонент расходует сообщения из входной очереди, обрабатывает сообщения (сообщения), а затем помещает 1+ сообщений в очередь исходящих/исходящих сообщений. Затем очередь "output" становится "входной" очередью для следующего компонента в цепочке. Довольно простой.
Теперь я пытаюсь свернуть рукава и провести модульное тестирование для каждого компонента, используя 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()
проверял, что сообщение присутствует внутри определенной очереди или что определенная очередь содержит сообщения?