Ошибка java.lang.RuntimeException: Stub! В Android с тестированием Fitnesse

Я пытаюсь создать тестовое оборудование с использованием Fitnesse , и я хочу протестировать функцию, которая извлекает данные с сервера (RESTFUL service). Мой тестовый пример очень прост:

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

И вот Fitnesse теста Fitnesse :! Path fitnesse.jar

 !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"| 

Поскольку это всего лишь демоверсия, мой тест может выглядеть немного глупо на данный момент. К сожалению, я продолжаю получать эти ошибки:

 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) 

И я понятия не имею, что это говорит мне? Я написал другой метод тестирования, например add(), substract() , все работало нормально. Интересно, эта ошибка включает выполнение длинной задачи в основном потоке? Есть идеи?

Solutions Collecting From Web of "Ошибка java.lang.RuntimeException: Stub! В Android с тестированием Fitnesse"

android.jar содержит только тупиковую реализацию классов. Он предоставляет средства для создания приложения, как только у вас есть APK, вы должны запустить его на устройстве или эмуляторе Android.

Если я не ошибаюсь, вы пытаетесь запустить JVM хоста.

Вы можете устранить эту проблему и протестировать в своей среде очень легко, используя Roboelectric .

Как сказал dtmilano, вы не можете запускать код Android на своем ноутбуке, как есть, но Roboelectric в основном заменяет фактические реализации методов для заглушек в Android.jar.

Две вещи, на которые нужно обратить внимание, если вы пойдете с этим решением:

  • Убедитесь, что ваш JAR-импорт находится выше Android JAR в списке зависимостей, если вы используете IntelliJ

  • По умолчанию он блокирует HTTP-запросы в предположении, что вы на самом деле не хотите каким-либо образом изменять состояние сервера. Вы можете, однако, отключить это довольно легко: Roboelectric.getFakeHttpLayer (). InterceptHttpRequests (false);

Как упоминалось ранее, Android jar s не хороши ни для чего, кроме компиляции. Даже самые невинные вещи полностью вычеркнуты. Но вы все равно можете использовать их в тестовых модулях Host VM с хорошими фальшивыми фреймворками. Мой выбор – jmockit :

Не уверен, будет ли он работать с Fitnesse, хотя