Как издеваться над Unirest методом цепочки? - PullRequest
0 голосов
/ 31 января 2019

У меня есть такой класс, который использует Unirest API для выполнения HTTP-вызова POST -

public class MyClass{
    public MyObject getData(){
    HttpResponse response = Unirest.post(someURL).header("Content-Type", "application/x-www-form-urlencoded")
                        .field("Field1", context.getParameter("value for field 1"))
                        .field("username", context.getParameter("username"))
                        .field("password", context.getParameter("password"))
                        .field("field 3", context.getParameter("field 3 value"))
                        .field("field 4", context.getParameter("field 4 value"))
                        .asJson();
    }
    }

В моем фиктивном классе - у меня есть объект HttpResponse в моем mockito, который будет возвращен, когда пост Unirest HTTP будетназываться.Я не хочу подключаться к конечной точке через Unirest и хочу вернуть свой пользовательский httpResponse.

HttpResonse<JsonNode> httpResponse; // my mocked response
Mockito.when(Unirest.post(someURL).header("Content-Type", "application/x-www-form-urlencoded")
                            .field("Field1", context.getParameter("value for field 1"))
                            .field("username", context.getParameter("username"))
                            .field("password", context.getParameter("password"))
                            .field("field 3", context.getParameter("field 3 value"))
                            .field("field 4", context.getParameter("field 4 value"))
                            .asJson()).thenReturn(httpResponse); // this is my custom response

Я уже смоделировал контекст для всех параметров, но все еще получаю ошибку как

org.mockito.exceptions.misusing.WrongTypeOfReturnValue:

HttpResponse не может быть возвращен getParameter ()

getParameter () должен вернуть String

Есть ли способсделать это проще для сторонних методов создания цепочек или лучшего примера для реализации?Спасибо!

1 Ответ

0 голосов
/ 31 января 2019

Самый простой способ, если вам разрешено выполнить рефакторинг вашего кода, - это извлечь статический вызов защищенного метода:

public class MyClass{
    public MyObject getData(){
      HttpResponse response = postRequest();
    }

    protected HttpResponse postRequest(){
       return Unirest.post(someURL).header("Content-Type", "application/x-www-form-urlencoded")
                        .field("Field1", context.getParameter("value for field 1"))
                        .field("username", context.getParameter("username"))
                        .field("password", context.getParameter("password"))
                        .field("field 3", context.getParameter("field 3 value"))
                        .field("field 4", context.getParameter("field 4 value"))
                        .asJson();
    }
}

Затем в вашем тестовом примере шпионите за тестируемым классом и высмеивайтезащищенный метод:

public void test(){
   MyClass myClass = Mockito.spy(new MyClass());

   HttpResonse<JsonNode> httpResponse; // my mocked response

   doReturn(httpResponse).when(myClass).postRequest();

   ...
}
...