Как использовать Mockito для макетирования запроса в клиенте Джерси? - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть класс для публикации POJO во внешний API.Я хочу протестировать этот метод.

public int sendRequest(Event event) {

   Client client = ClientBuilder.newClient();
   WebTarget baseTarget = client.target(some url);
   Invocation.Builder builder = baseTarget.request();
   Response response = builder.post(Entity.entity(event, MediaType.APPLICATION_JSON));
   int statusCode = response.getStatus();
   String type = response.getHeaderString("Content-Type");


  if (Status.Family.SUCCESSFUL == Status.Family.familyOf(statusCode)) {
        m_log.debug("The event was successfully processed by t API %s", event);
  }

  else if (Status.Family.CLIENT_ERROR == Status.Family.familyOf(statusCode)) {
      m_log.error("Status code : <%s> The request was not successfully processed by API. %s", statusCode, event);
  }

  return statusCode;
 }

Я написал модульный тест, подобный этому

@Test
  public void sendRequest_postAuditEvent_returnOK() {
  int statusCode = EventProcessor.sendRequest(event);
  assertEquals(Status.OK.getStatusCode(), statusCode);
 }

Но это отправит настоящий запрос в API.Я новичок в Мокито.Может кто-нибудь помочь мне, как смоделировать этот запрос?

Редактировать:

@Mock Client m_client;
@Mock WebTarget m_webTarget;
@Mock Invocation.Builder m_builder;
@Mock Response m_response;

@Test
public void sendRequest_postAuditEvent_returnOK() {
  when(m_client.target(anyString())).thenReturn(m_webTarget);
  when(m_webTarget.request()).thenReturn(m_builder);
  when(m_builder.post(Entity.entity(m_AuditEvent, MediaType.APPLICATION_JSON))).thenReturn(m_response);
  when(m_response.getStatus()).thenReturn(Response.Status.BAD_REQUEST.getStatusCode());
  assertEquals(Status.BAD_REQUEST.getStatusCode(), m_AuditEventProcessor.sendRequest(m_AuditEvent));
}

Я пытаюсь смоделировать методы, но это не работает.Еще вызовите реальный метод.

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Вы можете использовать powerMockito как этот пост Насмешливые статические методы с Mockito

Если вы можете смоделировать этот возвращенный объект ClientBuilder.newClient (), вы можете смоделировать все другие объекты в цепочке вызовов.

PowerMockito.mockStatic(ClientBuilder.class);
BDDMockito.given(ClientBuilder.newClient(...)).willReturn([a Mockito.mock()...]);
0 голосов
/ 13 ноября 2018

В идеале класс должен принимать Client в своем конструкторе, чтобы вы могли заменить реальный экземпляр клиента на макет при тестировании.

class EventProcessor {
    private Client client;

    public EventProcessor(Client client) {
        this.client = client;
    }

    public int sendRequest(Event event) {
        WebTarget baseTarget = client.target(some url);
        ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...