Pregunta

Esta es la clase que estoy tratando de prueba (que calcula el tamaño de la página 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();
  }
}

Por supuesto que sólo un ejemplo, no es una solución en la vida real. Ahora estoy tratando de probar esta clase:

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"))
    );
  }
}

¿Cómo debería burlarse de la clase com.sun.jersey.api.client.Client? Estoy tratando de utilizar Mockito, pero cualquier otro marco a estar bien, ya que soy un novato aquí ..

¿Fue útil?

Solución

ejemplo es realmente compleja, yo no era capaz de ejecutarlo con la más nueva versión de jersey, así que creé esas clases, y aquí es cómo me burlo con EasyMock.


String mockPage = "test page"; // length is 9

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

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

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

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

Si alguna de las clases que usted está tratando de simulacro duerma tienen constructor por defecto, entonces debería usar http: // easymock.org/api/easymock/3.0/org/easymock/IMockBuilder.html#withConstructor%28java.lang.Class...%29

Otros consejos

En realidad, no relacionada con su pregunta, pero puede venir en adelante a mano, es el Marco de prueba Jersey. Echa un vistazo a estas entradas de blog por uno de los colaboradores Jersey;

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

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

volver sobre el tema, para probar su clase Loader simplemente puede crear una instancia con un Client obtenida de Client.create(). Si está utilizando Maven puede crear un punto final del ensayo simulado (en src / test / java) para llamar y el marco de prueba de Jersey se carga en el embarcadero.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top