2013-08-20 4 views
3

Прежде всего я хотел бы заявить о своем разочаровании в связи с отсутствием надлежащей инфраструктуры тестирования в Android ... или, может быть, я отставлен, я не знаю ...
I в конечном итоге удалось настроить android-test-plugin, и я написал пару тестов для активности, которая включает в свой макет CustomMapFragment, который является классом, который я написал, который расширяет SupportMapFragment.
Все мои тесты, которые пытаются получить экземпляр этой деятельности с использованием:
Тестирование Android в Android Studio с использованием Robolectric issue

activity = Robolectric.buildActivity(MyActivity.class).create().get(); 

завершаться:

java.lang.NoClassDefFoundError: com/google/android/gms/maps/GoogleMap$OnInfoWindowClickListener

на данный вид деятельности setContentView.

XML-активность заключается в следующем:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:tools="http://schemas.android.com/tools" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       tools:context=".MyActivity"> 

    <fragment 
      android:id="@+id/customMapFragment" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      class="com.myproject.CustomMapFragment"/> 
</RelativeLayout> 

Есть обходной путь/решение для этого? Любая помощь будет оценена по достоинству.

+1

Я разделяю Ваше разочарование. У меня такая же проблема, но я не могу запустить какой-либо тест, потому что я получаю классы NoClassDefFoundError на картах, когда Robolectric пытается загрузить классы, поэтому даже тест assertTrue (true) терпит неудачу. Вот мой вопрос с ошибкой, которую я получаю http://stackoverflow.com/questions/18434217/robolectric-fails-to-run-tests-with-google-play-services-maps – alex

+0

Я думаю, что это общая проблема, а не напрямую связанных с картами, потому что я получал ту же ошибку с некоторыми классами, что и при использовании Google cloud messaging. Приятно знать, что есть люди, которые вас понимают :) на случай, если кто-то ответит здесь, я скажу вам. –

+0

Как вы добавили зависимость сервисов Google Play? Использовать репозиторий Google или по-другому? – alex

ответ

2

У меня есть временное решение. Проблема, похоже, в том, что Android-тест-плагин не в состоянии прочитать aar-файл. Мое решение добавить зависимость в файл банку, а не только к testCompile, как этот

testCompile files('YOUR_ANDROID_SDK_FOLDER/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar') 

Как это я могу запустить простой тест, например, создавая LatLng и проверки, если он не пустой, без ошибки. Надеюсь, поможет.

Редактировать

Лучшее решение благодаря SuperJugy на GitHub, чтобы применить исправление в этой фиксации https://github.com/SuperJugy/gradle-android-test-plugin/commit/d5b7836cf7278dc9d0fe765b635de60c33911d72

+0

Как только у меня есть время, чтобы проверить это, я приму свой ответ. В любом случае, спасибо большое @alex. –

+0

Хорошо, я сдаюсь ... Мне действительно удалось преодолеть эти «NoClassDefFoundErrors», но теперь я получаю «java.lang.RuntimeException: Stub!» как будто Robolectric добавлен в classpath до android.jar. В любом случае, создание последней версии Android-теста-плагина, похоже, исправило предыдущую проблему, поэтому я собираюсь принять ваш ответ. Благодарю. –

+0

Эх, я борюсь с одной проблемой за другой тоже, на самом деле я отказался от написания тестов. Мне пришлось использовать версию снимка robolectric из-за проблемы со стилями, и эта версия не находит файлы ресурсов ... – alex

Смежные вопросы