1 回答
TA贡献1802条经验 获得超6个赞
您的问题是您错过了一个事实,即您的应用程序是一个async,但您的测试与处理多线程解决方案无关。
您在测试方法中发送一条消息,并且不执行任何操作来等待输出消息。因此,启动测试执行的主线程就存在,而将其他线程中的所有执行抛在后面。
您的想法是发送到而helloWorldChannel不是处理 JMS 目的地是一个不错的选择。唯一的问题是聚合后不等待流结果。
将端点的输出放入 中也很奇怪errorChannel,但您可以在生成消息之前从测试用例中订阅它:
@Autowired
private SubscribableChannel errorChannel;
@Test
public void test() {
SettableListenableFuture<Message<?>> messageFuture = new SettableListenableFuture<>();
this.errorChannel.subscribe((message) -> messageFuture.set(message));
helloWorldChannel.send(MessageBuilder.withPayload("1,2,3,4,6").build());
Message<?> messageToAssert = messageFuture.get(10, TimeUnit.SECONDS);
...
}
这样,您的主 JUnit 线程将等待该 中的结果,而与流行为无关Future。
添加回答
举报