Spring Integration перехватывает прямой MessageChannel для тестирования

Я хочу провести интеграционный тест двух приложений Spring Boot, которые также используют потоки Spring Integration. Чтобы протестировать свои приложения, я хочу проверить сообщения, направляемые через myMessageChannel. Он определяется в потоке XML в одном из приложений.

Как мне подключиться к моему прямому каналу сообщений и перенаправить сообщения в PollableChannel, чтобы я мог читать их одно за другим? Ни один из методов, которые я нашел в Интернете, не работал для меня.

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {App1.class, App2.class}, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@TestPropertySource("classpath:integration.properties")
public class MyWireTapTest {

    @Autowired
    MessageChannel myMessageChannel;

    @Test
    public void test() {


        // This is basically what I want to do
        // But it does not work, since it is a direct channel
        myMessageChannel.recieve();

    }
}

person joschal    schedule 04.01.2018    source источник


Ответы (2)


Автоподключите его как AbstractMessageChannel и используйте

myMessageChannel.addInterceptor(new WireTap(tapChannel));

person Gary Russell    schedule 04.01.2018

Я написал пример демонстрации того, как это сделать (через конфигурацию XML):

https://github.com/hakanozbay/spring-integration-testing

person Hakan Ozbay    schedule 07.02.2018