测试Spring与用户通道的集成

时间:2018-01-13 14:55:21

标签: testing groovy spring-integration publish-subscribe channel

我有以下内容:

Direct-Channel => Splitter => PublishSubscribeChannel

我想将数据发送到直接频道并在发布 - 订阅频道中测试结果

我到目前为止部分取自Spring.io(仅当我逐步调试模式时才有效)是:

DirectChannel incomeChannel
PublishSubscribeChannel subscribeChannel

@Test
public void test() {
    final AtomicInteger count  = new AtomicInteger()

    assert true == subscribeChannel.subscribe(new MessageHandler() {
        void handleMessage(Message<?> message) throws MessagingException {
            count.getAndIncrement();
            Entity response = message.getPayload()
            assert response != null
            // assertions ...
        }
    })

    def request = MessageBuilder.withPayload(entities).build()
    assert incomeChannel.send(request) == true

    Thread.sleep(10000)
    assert 0 < count.get()
}

1 个答案:

答案 0 :(得分:2)

您不显示您的配置,但如果您的pub子通道有任务执行程序,则需要添加一个锁存器;你还应该在主线程上做断言......

@Test
public void test() {
    final AtomicReference<Message<?>> messageRef = new AtomicReference<>();
    final CountDownLatch latch = new CountDownLatch(1);

    assert true == subscriberChannel.subscribe(new MessageHandler() {
        void handleMessage(Message<?> message) throws MessagingException {
            messageRef.set(message);
            latch.countDown();
        }
    })

    def request = MessageBuilder.withPayload(entities).build()
    assert incomeChannel.send(request) == true
    assert true == latch.await(10, TimeUnit.SECONDS)
    Entity response = msg.get().getPayload()
    assert response != null
    // assertions ...

}