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。
添加回答
舉報