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.
- Crear PDU para Android
- ¿Cómo puedo usar Active Android con una base de datos en memoria para las pruebas de unidad usando Robolectric?
- Robolectric filenotFound en archivos de activos
- ¿Cuál es la forma más rápida de ejecutar pruebas de unidad en Android
- Separar las pruebas de integración de las pruebas unitarias en Android Studio
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 }
- Android, Gradle. Cómo construir aplicaciones y ejecutar pruebas desde la aplicación de prueba
- ¿Cómo puedo burlarme del contexto usando Mockito y Robolectric?
- Cómo escribir la prueba de Robolectric (2.3) usando la base de datos
- Prueba de AsyncTaskLoaders con Robolectric
- ¿Cómo burlar el método antes de que se cree la actividad?
- ¿Cómo probar mejor el código Looper y Handler de la unidad en Android?
- Soporte de la clase Robolectric de Android. Cómo tener las referencias de la clase de biblioteca R desde el proyecto de aplicación
- ActivityUnitTestCase arroja RuntimeException cuando se ejecuta con AndroidJUnitRunner
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 ..
}
- Android-notifyDataSetChanged no funciona en BaseAdapter
- ¿Cómo veo source o javadocs para una dependencia de biblioteca en un paquete de Android en Eclipse?