Насмешливый Унирест с мокито - PullRequest
0 голосов
/ 19 марта 2019

Я нахожусь на начальной стадии программирования, и я хотел спросить о насмешках над объектами с помощью Mockito, более конкретно - ответ Unirest. Допустим, у меня есть база данных, и я не хочу беспокоиться об этом каждый раз, когда я тестирую, и я хочу использовать Mockito для этого, но проблема в том, что я не уверен, как создать поддельный объект «httpResponse», который будет возвращаться , Чтобы дать некоторый контекст, я приложил свой код:

    /**
 * This method lists the ID of the activity when requested.
 *
 * @return the list of all activities
 */
public  JSONArray getActivites() {
    HttpResponse<JsonNode> jsonResponse = null;
    try {
        jsonResponse = Unirest
                .get("http://111.111.111.111:8080/activity")
                .header("accept", "application/json")
                .asJson();
    } catch (UnirestException e) {
        System.out.println("Server is unreachable");
    }

    JSONArray listOfActivities = jsonResponse.getBody().getArray();
    return listOfActivities;
}

Так что я имел в виду, это издеваться над Unirest, а затем, когда вызывается метод .get, я возвращаю поддельный HttpResponse, проблема в том, что я не уверен, как, я посмотрел онлайн и не смог действительно много смысла в этом. Можно ли это сделать 1 раз с действительной базой данных, а затем «извлечь» информацию и использовать ее каждый раз для тестирования?

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Вместо непосредственного вызова статического члена вы можете заключить вызов в класс-оболочку, который может предоставлять HttpResponse на основе некоторых аргументов. Это интерфейс, который можно легко смоделировать в Mockito.

/**
 * This is a wrapper around a Unirest API.
 */
class UnirestWrapper {

    private HttpResponse<JsonNode> getResponse(String accept, String url) {
        try {
            return Unirest
                .get(url)
                .header("accept", accept)
                .asJson();
        } catch (UnirestException e) {
            System.out.println("Server is unreachable");
        }
        // Or create a NULL HttpResponse instance.
        return null;
    }
}

private final UnirestWrapper unirestWrapper;

ThisClassConstructor(UnirestWrapper unirestWrapper) {
    this.unirestWrapper = unirestWrapper;
}

/**
 * This method lists the ID of the activity when requested.
 *
 * @return the list of all activities
 */
public JSONArray getActivites() {
    HttpResponse<JsonNode> jsonResponse = this.unirestWrapper.getResponse("http://111.111.111.111:8080/activity", "application/json");

    if (jsonResponse == null) {
        return null;
    }

    JSONArray listOfActivities = jsonResponse.getBody().getArray();
    return listOfActivities;
}

Или вы можете использовать силовые макеты ...

0 голосов
/ 19 марта 2019

Пример фрагмента с PowerMockRunner, PowerMockito и Mockito

@RunWith(PowerMockRunner.class)
    @PrepareForTest({ Unirest.class})
    public class TestApp{

      @Before
      public void setup() {
        PowerMockito.mockStatic(Unirest.class);
      }

      @Test
      public void shouldTestgetActivites() throws UnirestException {
        when(Unirest.get(Client.DEFAULT_BASE_URL)).thenReturn(getRequest);
        when(getRequest.asJson()).thenReturn(httpResponse);
        when(httpResponse.getStatus()).thenReturn(Integer.valueOf(200));

        assertThat(something).isEqualTo(true);
      }

    }
...