2017-01-06 1 views
3

Я пытаюсь написать потоки интеграции Junits для Spring, и у меня есть мост, определенный каналу (Direct Channel), для которого я хочу проверить сообщение. Поскольку канал не публикует канал публикации, мост не получает сообщение. Я не хочу изменять канал для публикации канала публикации для целей Junit. Есть ли способ, кроме того, что он делает канал публикации?Spring Integration Junit Bridge прямой канал для testChannel

<integration:channel id="processResponseChannel1" /> 
<integration:channel id="processResponseChannel2" /> 
<integration:channel id="processResponseChannel3" /> 
<integration:channel id="processResponseChannel4" /> 

<integration:service-activator 
    input-channel="processResponseChannel1" 
    output-channel="processResponseChannel2"      
    ref="processResponseActivator1"/> 

<integration:service-activator 
    input-channel="processResponseChannel2" 
    output-channel="processResponseChannel3"      
    ref="processResponseActivator2"/> 

<integration:service-activator 
    input-channel="processResponseChannel3" 
    output-channel="processResponseChannel4"      
    ref="processResponseActivator3"/> 

Я хочу, чтобы получить сообщение в processResponseChannel2 в моем JUnit и выполнять некоторые утверждения этого сообщения.

<integration:bridge input-channel="processResponseChannel2" 
output-channel="testChannel"/> 

<integration:channel id="testChannel"> 
    <integration:queue/> 
</integration:channel> 

В JUnit, я использую testChannel.receive (5000), чтобы получить сообщение, но тест не удается. Я не хочу, чтобы processResponseChannel2 опубликовал подписку, чтобы заставить тестовый класс работать. Есть ли другой способ получить сообщение в канале processResponseChannel2.

ответ

2

Вы можете ввести желаемый канал в качестве тестового примера AbstractMessageChannel и обогатить этот канал ChannelInterceptor. В реализации preSend() вы можете утверждать входящие сообщения.

Таким образом, ваш конфиг останется таким же, как для тестов, как для производства.

+0

С благодарностью Артем. Это сработало для меня. –