Uso de Mockito con Retrofit 2.0

Estoy intentando crear pruebas de unidad para mis llamadas de api (hechas a través de Retrofit 2.0) usando Mockito .

Este parecía ser el blog más popular sobre el uso de Mockito con Retrofit .

Http://mdswanson.com/blog/2013/12/16/reliable-android-http-testing-with-retrofit-and-mockito.html

Desafortunadamente, utiliza versiones anteriores de Retrofit , y depende de los Callbacks y RetrofitError , que se descontinúan desde 2.0.

¿Cómo haces esto con Retrofit 2.0 ?

PS: Estoy usando RxJava junto con retrofit , por lo que algo que funciona con RxJava sería genial. ¡Gracias!

En el repositorio oficial de Retrofit hay un ejemplo que puede ser útil: https://github.com/square/retrofit/tree/master/retrofit-mock

También he encontrado: https://touk.pl/blog/2014/02/26/mock-retrofit-using-dagger-and-mockito/

Aquí encontrarás este fragmento:

Pruebas unitarias

Durante el desarrollo de la aplicación, puede enviar las solicitudes del servidor todo el tiempo (o la mayor parte del tiempo) por lo que es posible vivir sin servidor escarnecido, es una mierda, pero es posible. Desafortunadamente no eres capaz de escribir buenas pruebas sin la burla. A continuación hay dos pruebas unitarias. En realidad no prueban nada, pero de manera sencilla muestra cómo burlarse del servicio Retrofit utilizando Mockito y Dagger .

  @RunWith(RobolectricTestRunner.class) public class EchoServiceTest { @Inject protected EchoService loginService; @Inject protected Client client; @Before public void setUp() throws Exception { Injector.add(new AndroidModule(), new RestServicesModule(), new RestServicesMockModule(), new TestModule()); Injector.inject(this); } @Test public void shouldReturnOfferInAsyncMode() throws IOException { //given int expectedQuantity = 765; String responseContent = "{" + " \"message\": \"mock message\"," + " \"quantity\": \"" + expectedQuantity + "\"" + "}"; mockResponseWithCodeAndContent(200, responseContent); //when EchoResponse echoResponse = loginService.getMessageAndQuantity("test", "test"); //then assertThat(echoResponse.getQuantity()).isEqualTo(expectedQuantity); } @Test public void shouldReturnOfferInAsyncModea() throws IOException { //given int expectedQuantity = 2; String responseContent = "{" + " \"message\": \"mock message\"," + " \"quantity\": \"" + expectedQuantity + "\"" + "}"; mockResponseWithCodeAndContent(200, responseContent); //when EchoResponse echoResponse = loginService.getMessageAndQuantity("test", "test"); //then assertThat(echoResponse.getQuantity()).isEqualTo(expectedQuantity); } protected void mockResponseWithCodeAndContent(int httpCode, String content) throws IOException { Response response = createResponseWithCodeAndJson(httpCode, content); when(client.execute(Matchers.anyObject())).thenReturn(response); } private Response createResponseWithCodeAndJson(int responseCode, String json) { return new Response(responseCode, "nothing", Collections.EMPTY_LIST, new TypedByteArray("application/json", json.getBytes())); } 

Lea también: Simulación de servidor de actualización cuadrada para pruebas

Espero que ayude

  • RxJava: Averigüe si BehaviorSubject fue un valor repetido o no
  • Desbordamiento de pila al utilizar Retrofit rxjava concatWith
  • Android rxJava Manejo de errores con retroadaptación
  • RxJava / RxBinding: cómo manejar los errores en RxView
  • ¿Por qué debounce () con toList () no funciona en RxAndroid?
  • Compartiendo RxBindings Eventos observables entre múltiples suscriptores
  • ¿Tenemos alguna posibilidad de detener la solicitud en OkHttp Interceptor?
  • ¿Cómo devolver el valor con RxJava?
  • Cómo anular los Observables compartidos, infinitos con un retraso después de que el último suscriptor no se haya suscrito
  • Habilitación del botón cuando EditText tiene texto (RxAndroid)
  • Una cola de tareas de fondo en rxjava
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.