Не удается заставить мой WebClient отправлять запросы в API, продолжайте получать эту ошибку - PullRequest
0 голосов
/ 04 января 2019

Я создаю клиент для отправки запросов в API и пытаюсь написать тест Junit, но получаю эту ошибку.Я проверил отправку запросов в API, и он прекрасно работает.Вот мой код клиента, который отправляет запрос:

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.*;
import java.awt.List;
import javax.xml.ws.Response;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import io.netty.util.concurrent.Future;
import io.vertx.core.Vertx;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.client.HttpRequest;
import io.vertx.ext.web.client.WebClient;
import io.vertx.junit5.VertxExtension;
import io.vertx.junit5.VertxTestContext;

@ExtendWith(VertxExtension.class)
public class LoginCoreTestTest {

    private LoginCoreTest client;

    //set up WebClient
    private WebClient createMockWebClient(JsonObject mockResponse) {
        WebClient mockWebClient = mock(WebClient.class);
        HttpRequest<Buffer> mockRequest = mock(HttpRequest.class);

        when(mockWebClient.post(any())).thenReturn(mockRequest);
        when(mockRequest.putHeader(any(), any())).thenReturn(mockRequest);
        doAnswer(new Answer() {

            @Override
            public Object answer(InvocationOnMock invocation) throws Throwable {
                // TODO Auto-generated method stub
                java.util.function.Consumer func = invocation.getArgument(1);
                func.accept(mockResponse);
                return null;
            }

        }).when(mockRequest).sendJson(any(), any());
        return mockWebClient;
    }

    @Test
    @DisplayName("Test response from client")
    public void test() { 
        //request being sent
        JsonObject request = new JsonObject().put("SSN", "123456789").put("Address", "123 main st").put("zip", "08888").put("dob", "012387");

        //expected response
        JsonObject response = new JsonObject().put("clientToken", "11oije311").put("clientID", "123ID");

        //test setup
        LoginCoreTest coreClient = new LoginCoreTest(createMockWebClient(response), "http://localhost:8080/core");

        //test steps
        coreClient.invokeCore(request, resp -> {
            assertEquals(resp.getString("clientToken"), response.getString("clientToken"));
            //end.finished();
        });
    } 
}

Вот тестовый класс, который я использую, чтобы проверить, что правильный ответ отправляется обратно:

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.*;
import java.awt.List;
import javax.xml.ws.Response;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import io.netty.util.concurrent.Future;
import io.vertx.core.Vertx;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.client.HttpRequest;
import io.vertx.ext.web.client.WebClient;
import io.vertx.junit5.VertxExtension;
import io.vertx.junit5.VertxTestContext;

@ExtendWith(VertxExtension.class)
public class LoginCoreTestTest {

    private LoginCoreTest client;

    //set up WebClient
    private WebClient createMockWebClient(JsonObject mockResponse) {
        WebClient mockWebClient = mock(WebClient.class);
        HttpRequest<Buffer> mockRequest = mock(HttpRequest.class);

        when(mockWebClient.post(any())).thenReturn(mockRequest);
        when(mockRequest.putHeader(any(), any())).thenReturn(mockRequest);
        doAnswer(new Answer() {

            @Override
            public Object answer(InvocationOnMock invocation) throws Throwable {
                // TODO Auto-generated method stub
                java.util.function.Consumer func = invocation.getArgument(1);
                func.accept(mockResponse);
                return null;
            }

        }).when(mockRequest).sendJson(any(), any());
        return mockWebClient;
    }

    @Test
    @DisplayName("Test response from client")
    public void test() { 
        //request being sent
        JsonObject request = new JsonObject().put("SSN", "123456789").put("Address", "123 main st").put("zip", "08888").put("dob", "012387");

        //expected response
        JsonObject response = new JsonObject().put("clientToken", "11oije311").put("clientID", "123ID");

        //test setup
        LoginCoreTest coreClient = new LoginCoreTest(createMockWebClient(response), "http://localhost:8080/core");

        //test steps
        coreClient.invokeCore(request, resp -> {
            assertEquals(resp.getString("clientToken"), response.getString("clientToken"));
            //end.finished();
        });
    } 
}

И этоэто ошибка, которую я продолжаю получать при попытке запустить тест: enter image description here

Есть идеи, почему эти ошибки появляются, когда я пытаюсь запустить тест?

...