usar tutorial descargar como android http testing rest fitnesse

tutorial - Error java.lang.RuntimeException: Stub! en Android con pruebas de Fitnesse



fitnesse descargar (3)

Fitnesse crear un dispositivo de prueba utilizando el marco Fitnesse , y quiero probar una función que recupera datos de un servidor (servicio RESTFUL). Mi caso de prueba es muy simple:

public class FriendListActivityFixture extends ColumnFixture { public int URL; public String test() { JSONArray array = JsonHelper.getJsonArrayFromUrl("http://107.22.209.62/android/get_users.php"); return array.toString(); } } public static JSONArray getJsonArrayFromUrl(String url) { InputStream input = null; String result = ""; JSONArray jsonArray = null; try { HttpClient httpclient = CustomHttpClient.getHttpClient(); HttpPost httppost = new HttpPost(url); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); input = entity.getContent(); } catch (Exception e) { Log.e(TAG + ".getJsonArrayFromUrl(String url)", "Error in http connection " + e.toString()); } try { BufferedReader reader = new BufferedReader(new InputStreamReader(input, "iso-8859-1"), 8); StringBuilder content = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { content.append(line + "/n"); } input.close(); result = content.toString(); } catch (Exception e) { Log.e(TAG + ".getJsonArrayFromUrl(String url)", "Error parsing result " + e.toString()); } try { jsonArray = new JSONArray(result); } catch (JSONException e) { Log.e(TAG + "getJsonArrayFromUrl(String url)", "Error converting data " + e.toString()); } return jsonArray; }

Y aquí está la página de prueba de Fitnesse

!path C:/Program Files (x86)/Android/android-sdk/platforms/android-10/android.jar !path C:/Users/chan/git/Spotr/Spotr/bin/classes !|com.csun.spotr.fitnesse.FriendListActivityFixture| |URL|test?| |0|"wwa"|

Como es solo una demostración, mi prueba puede parecer un poco tonta en este momento. Desafortunadamente, sigo recibiendo estos errores:

java.lang.RuntimeException: Stub! at android.util.Log.e(Log.java:15) at com.csun.spotr.util.JsonHelper.getJsonArrayFromUrl(JsonHelper.java:75) at com.csun.spotr.fitnesse.FriendListActivityFixture.test(FriendListActivityFixture.java:30) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at fit.TypeAdapter.invoke(TypeAdapter.java:109) at fit.TypeAdapter.get(TypeAdapter.java:97) at fit.Fixture$CellComparator.compareCellToResult(Fixture.java:371) at fit.Fixture$CellComparator.access$100(Fixture.java:357) at fit.Fixture.compareCellToResult(Fixture.java:299) at fit.Fixture.check(Fixture.java:295) at fit.ColumnFixture.check(ColumnFixture.java:51) at fit.Binding$QueryBinding.doCell(Binding.java:215) at fit.ColumnFixture.doCell(ColumnFixture.java:37) at fit.Fixture.doCells(Fixture.java:171) at fit.Fixture.doRow(Fixture.java:165) at fit.ColumnFixture.doRow(ColumnFixture.java:25) at fit.Fixture.doRows(Fixture.java:159) at fit.ColumnFixture.doRows(ColumnFixture.java:18) at fit.Fixture.doTable(Fixture.java:153) at fit.Fixture.interpretTables(Fixture.java:99) at fit.Fixture.doTables(Fixture.java:79) at fit.FitServer.process(FitServer.java:81) at fit.FitServer.run(FitServer.java:56) at fit.FitServer.main(FitServer.java:41)

Y no tengo idea de qué me dice? Escribí otro método de prueba como add(), substract() , todo funcionó bien. Me pregunto si este error implica ejecutar una tarea larga en el hilo principal. ¿Alguna idea?


Como se mencionó anteriormente, los archivos jar Android no son buenos para nada más que compilar. Incluso la mayoría de las cosas inocentes son apagadas por completo. Pero aún puede usarlos en las pruebas de la unidad VM de host con buenos marcos de burla. Mi elección es jmockit :

Sin embargo, no estoy seguro si funcionará con Fitnesse


Puede solucionar este problema y realizar pruebas dentro de su IDE de manera muy sencilla utilizando Roboelectric .

Como dtmilano dijo, no se puede ejecutar el código de Android en su computadora portátil como está, pero Roboelectric básicamente sustituye las implementaciones de método reales para los stubs en Android.jar.

Dos cosas de las que debes tener cuidado si vas con esta solución:

  • Asegúrese de que su importación JAR esté por encima del JAR de Android en su lista de dependencias si usa IntelliJ

  • De forma predeterminada, bloquea las solicitudes HTTP bajo el supuesto de que realmente no desea cambiar el estado de un servidor en alguna parte. Sin embargo, puede desactivar esto bastante fácilmente: Roboelectric.getFakeHttpLayer (). InterceptHttpRequests (false);


android.jar contiene solo la implementación de stub de las clases. Proporciona los medios para que tu aplicación cree, una vez que tienes tu APK debes ejecutarlo en un dispositivo Android o emulador.

Si no me equivoco, está intentando ejecutar en la JVM del host.