0
Java 8のFire-and-forget完了ステージメソッドを含むメソッドを含む統合テストを作成しようとしています。次Java 8での非同期のfire-and-forgetメソッドのテスト
public CompletionStage<User> createAndStoreUser() {
return createUser()
.thenApply(this::store)
.thenApply(user -> {
findTeam(user)
.thenAccept(team -> { // fire and forget
thirdPartyClient.enqueue(team);
})
.handle(swallow(t -> log.error("Enqueue team failed", t)));
return user;
})
})
現在、私の統合テストは、次のようになります。
@Test
public void testCreateAndStoreUser() {
User user = createAndStoreUser().toCompletableFuture().join();
ItThirdPartyClient thirdPartyClient = itThirdPartyClient();
assertThat(thirdPartyClient.getQueue(), hasSize(1));
}
しかし、エンキュー呼び出しが別のスレッドであるとで完了していない可能性があるため、これは毎回合格する保証はありませんアサーションが行われる時間。入れ子にされたCompletionStageをテスト目的のためだけに完成させるように強制する方法はありますか?
ありがとうございました。