Как мне высмеивать запросы HTTP-клиента Джерси? - PullRequest
2 голосов
/ 11 октября 2010

Это класс, который я пытаюсь проверить (он рассчитывает размер HTTP-страницы):

import javax.ws.rs.core.MediaType;
import com.sun.jersey.api.client.*;
public class Loader {
  private Client client;
  public Loader(Client c) {
    this.client = c;
  }
  public Integer getLength(URI uri) throws Exception {
    return c.resource(uri) // returns WebResource
      .accept(MediaType.APPLICATION_XML) // returns WebResource.Builder
      .get(String.class) // returns String
      .length();
  }
}

Конечно, это всего лишь пример, а не реальное решение. Сейчас я пытаюсь проверить этот класс:

public class LoaderTest {
  @Test public void shouldCalculateLength() throws Exception {
    String mockPage = "test page"; // length is 9
    Client mockedClient = /* ??? */;
    Loader mockedLoader = new Loader(mockedClient);
    assertEquals(
      mockPage.length(), 
      mockedLoader.getLength(new URI("http://example.com"))
    );
  }
}

Как мне высмеивать com.sun.jersey.api.client.Client класс? Я пытаюсь использовать Mockito, но любой другой фреймворк будет в порядке, так как я новичок здесь ..

Ответы [ 2 ]

1 голос
/ 11 октября 2010

На самом деле не имеет отношения к вашему вопросу, но может пригодиться позже, это Тестовая структура Джерси. Проверьте эти записи в блоге одного из участников Джерси;

http://blogs.oracle.com/naresh/entry/jersey_test_framework_makes_it

http://blogs.oracle.com/naresh/entry/jersey_test_framework_re_visited

Возвращаясь к теме, чтобы проверить свой класс Loader, вы можете просто создать его с помощью Client, полученного из Client.create(). Если вы используете Maven, вы можете создать фиктивную конечную точку теста (в src / test / java) для вызова, и среда тестирования Jersey Test загрузит ее в Jetty.

0 голосов
/ 14 октября 2010

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

<code>
String mockPage = "test page"; // length is 9</p>

<p>RequestBuilder requestBuilderMock = createNiceControl().createMock(RequestBuilder.class);
expect(requestBuilderMock.get((Class < String >) anyObject())).andReturn("12345678").anyTimes();
replay(requestBuilderMock);</p>

<p>WebResource webResourcemock = createNiceControl().createMock(WebResource.class);
expect(webResourcemock.accept((String[]) anyObject())).andReturn(requestBuilderMock).anyTimes();
replay(webResourcemock);</p>

<p>Client clientMock = createNiceControl().createMock(Client.class);
expect(clientMock.resource((URI) anyObject())).andReturn(webResourcemock).anyTimes();
replay(clientMock);</p>

<p>Loader mockedLoader = new Loader(clientMock);
assertEquals((Integer) mockPage.length(), mockedLoader.getLength(new URI("http://example.com")));

Если у какого-либо из классов, которые вы пытаетесь смоделировать, нет конструктора по умолчанию, вам следует использовать http://easymock.org/api/easymock/3.0/org/easymock/IMockBuilder.html#withConstructor%28java.lang.Class...%29

...