我试图为我向JMS端点发送消息然后使用Spring Integration处理消息的场景编写测试用例。这是一个有效的测试用例,但我并不完全清楚它为什么有效。这是测试:
public class MessageListenerTest {
@Autowired ApplicationContext context;
@Test
public void testEventListener() {
SubscribableChannel eventsChannel = (SubscribableChannel) context.getBean("events");
class TestMessageHandler implements MessageHandler {
public Boolean received = false;
@Override
public void handleMessage(Message<?> message) throws MessagingException {
received = true;
}
}
TestMessageHandler handler = new TestMessageHandler();
eventsChannel.subscribe(handler);
PollableChannel outputChannel = new QueueChannel();
PollingConsumer consumer = new PollingConsumer(outputChannel, handler);
consumer.setBeanFactory(context);
consumer.start();
String msg = "hello world!";
JmsTemplate template = (JmsTemplate) context.getBean("jmsTemplate");
template.convertAndSend("myQueue", msg);
outputChannel.receive(2000);
Assert.assertTrue(handler.received);
}
}
这测试是否收到发送到队列的消息。该邮件由名为SubscribableChannel
的{{1}}收到。我不清楚events
如何与PollableChannel
相关联。是因为SubscribableChannel
吗?如果是这样,怎么样?如果这完全是偶然的,那么如果有人可以解决这个问题或者为这种情况提供一个更简单的测试用例,这将是有用的。
更新:根据评论中的建议,这是一个经过修改的测试用例:
TestMessageHandler
答案 0 :(得分:1)
您的outputChannel
无效。此通道是测试用例范围。所以没有人向它发送消息。
您可以使用assert
:
Assert.notNull(outputChannel.receive(2000));
MessageHandler
订阅了多少频道并不重要。它只处理消息。因此,它会继续处理来自您events
的邮件。对内联outputChannel
的绑定只是死了,对其他应用程序无关紧要。