1 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊
您的問題是您錯(cuò)過了一個(gè)事實(shí),即您的應(yīng)用程序是一個(gè)async,但您的測(cè)試與處理多線程解決方案無關(guān)。
您在測(cè)試方法中發(fā)送一條消息,并且不執(zhí)行任何操作來等待輸出消息。因此,啟動(dòng)測(cè)試執(zhí)行的主線程就存在,而將其他線程中的所有執(zhí)行拋在后面。
您的想法是發(fā)送到而helloWorldChannel不是處理 JMS 目的地是一個(gè)不錯(cuò)的選擇。唯一的問題是聚合后不等待流結(jié)果。
將端點(diǎn)的輸出放入 中也很奇怪errorChannel,但您可以在生成消息之前從測(cè)試用例中訂閱它:
@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 線程將等待該 中的結(jié)果,而與流行為無關(guān)Future。
添加回答
舉報(bào)