UnitTest JSONObject muestra null

Tengo un problema conectado con JSONObject.

@Test public void toUrlTest() throws JSONException { String url; JSONObject json = new JSONObject(); json.put"id", 1); json.put("email", "[email protected]"); url = JSONParser.toURLString(json); assertEquals("id=1&[email protected]", url); } 

El problema es cuando estoy depurando esta prueba, muestra que no se pone nada al objeto json.

Json={org.json.JSONObject@826} "null"

Lo he comprobado todo y no tengo ni idea de por qué sucede esto. JSONObject funciona bien en la aplicación. Sólo ocurre durante las pruebas.

PD. He añadido en build.gradle esto

  testOptions { unitTests.returnDefaultValues = true } 

Hay dos tipos de pruebas de unidad en Android:

  • Instrumental (lento y necesita un dispositivo o un emulador)
  • No instrumentado o local (rápido y puede ejecutarlos en la JVM en su computadora)

Si las pruebas de su unidad utilizan las clases proporcionadas por el SDK de Android (como el JSONObject o un Contexto ), tendrá que elegir entre:

  • Haciendo de su prueba una prueba instrumentada O
  • Utilizar Roboeléctrico

Usted tiene más información útil sobre este tema en esta publicación.

Por cierto, en el post aprenderás un truco para convertir tu prueba de unidad JSONObject a una prueba no instrumentada que puedes ejecutar en tu JVM local (sin Roboelectric)

TL; DR versión de la respuesta de Yair Kukielka … (gracias!)

Agregue esto a su archivo build.gradle , como lo sugiere

 testCompile "org.json:json:20140107" 

Esto reemplazará la stubbed biblioteca de Android con una que funcione en el escritorio.

Puede usar Mockito para burlar JSONObject y devolver el objeto JSON que necesita.

Ejemplo:

 @Test public void myTest(){ JsonHttpResponseHandler handler = myClassUnderTest.getHandlerForGetCalendar(testFuture); JSONObject successResp = Mockito.mock(JSONObject.class); JSONArray events = Mockito.mock(JSONArray.class); JSONObject event = Mockito.mock(JSONObject.class); try{ doReturn("Standup meeting with team..") .when(event).getString("Subject"); doReturn("id_") .when(event).getString("Id"); doReturn(1) .when(events).length(); doReturn(event) .when(events).getJSONObject(0); doReturn(events) .when(successResp).getJSONArray("value"); handler.onSuccess(200, null, successResp); }catch(Exception xx){ JSONObject errorResp = null; try{ errorResp = new JSONObject("{}"); // this will be null but it's fine for the error case.. }catch(JSONException ex){ throw new IllegalStateException("Test Exception during json error response construction. Cause: "+ex); } handler.onFailure(500, null, new IllegalStateException("Something went wrong in test helper handlerForGetCalendarOnSuccess. Cause: "+xx), errorResp); } // Assertions you need .. 

}

  • Sugar ORM necesita registros para ser guardado cada vez mientras que la prueba de unidad?
  • `RenamingDelegatingContext` está obsoleto. ¿Cómo probamos SQLite db ahora?
  • Automatización de la caja de prueba de la unidad Android: biblioteca Robolectric vs marco de pruebas de Android
  • Eliminación de contactos (crudos) en Android 2.x
  • Unidad de pruebas de creación de una base de datos SQLite utilizando Spock y Robospock
  • Cobertura de código con jacoco para una biblioteca de Android
  • Prueba de la unidad de Android Studio SQLiteDataBase es nula
  • Error en la automatización de las pruebas de interfaz de usuario de Android en Jenkins-Server debido a complejas dependencias del proyecto lib de los proyectos principales.
  • Prueba de unidades de Android con ContentProviders
  • ¿Cómo forzar un cambio de configuración en una prueba Android Robolectric?
  • Android: Unidad de pruebas de aplicaciones Android con Robolectric y Mockito
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.