Как мне написать модульный тест для кода ниже
public CompletableFuture<String> sendMessage(final String message) {
Preconditions.checkArgument(message != null, "Message can't be null");
CompletableFuture<SendMessageResult> completableFuture = new CompletableFuture<>();
amazonSQSAsync.sendMessageAsync(sqsMessageRequestFactory.create(message), new AsyncHandler<SendMessageRequest, SendMessageResult>() {
@Override
public void onError(final Exception exception) {
completableFuture.completeExceptionally(exception);
}
@Override
public void onSuccess(final SendMessageRequest request, final SendMessageResult sendMessageResult) {
completableFuture.complete(sendMessageResult);
}
});
return completableFuture.thenApply(SendMessageResult::getMessageId)
.whenComplete(this::sentMessageAsyncResult)
.exceptionally(this::processException);
}
пробовал Argumentcaptor, но не работает. Как я могу назвать completetablefuture так, чтобы я получил ответ обратно, чтобы проверить утверждение. Попробовал, как показано ниже:
@Test
public void sendMessageSuccessful() {
final SendMessageResult sendMessageResult = new SendMessageResult().withMessageId(MESSAGE_ID);
final SendMessageRequest sendMessageRequest = new SendMessageRequest();
when(sqsMessageRequestFactory.create(anyString())).thenReturn(sendMessageRequest);
sqsAsyncClientImpl.sendMessage("any");
@SuppressWarnings("unchecked") ArgumentCaptor<AsyncHandler<SendMessageRequest, SendMessageResult>> argumentCaptor = ArgumentCaptor.forClass(AsyncHandler.class);
verify(amazonSQSAsync, timeout(100).times(1)).sendMessageAsync(eq(sendMessageRequest), argumentCaptor.capture());
argumentCaptor.getValue().onSuccess(sendMessageRequest, sendMessageResult);
}