Модульный тест для AWS Asynchandler - PullRequest
0 голосов
/ 17 января 2020

Как мне написать модульный тест для кода ниже

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);

    }
...