测试 Spring- 与订阅者频道的集成

Testing Spring-Integration with subscriber 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()
}

你没有显示你的配置,但是,如果你的发布子频道有一个任务执行器,你需要添加一个锁存器;您还应该在主线程上执行断言...

@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 ...

}