Robolectric + Eclipse Не можете найти ресурсы? - PullRequest
9 голосов
/ 17 марта 2011

Я только что настроил тестовый проект для моего приложения для Android на использование Robolectric. Я следовал за Eclipse Quick Start . Возникает исключение при выполнении моего самого простого первого теста.

java.lang.RuntimeException: java.lang.NullPointerException
    at com.xtremelabs.robolectric.res.ResourceLoader.init(ResourceLoader.java:93)
    at com.xtremelabs.robolectric.res.ResourceLoader.getStringValue(ResourceLoader.java:271)
    at com.xtremelabs.robolectric.shadows.ShadowResources.getString(ShadowResources.java:56)
    at android.content.res.Resources.getString(Resources.java)
    at org.xxx.mobile.android.teldir.app.TelephoneDirectoryTest.searchButtonLabelShouldBeGo(TelephoneDirectoryTest.java:22)
    [...]
Caused by: java.lang.NullPointerException
    at com.xtremelabs.robolectric.res.StringResourceLoader.getValue(StringResourceLoader.java:17)
    at com.xtremelabs.robolectric.res.StringArrayResourceLoader.processNode(StringArrayResourceLoader.java:39)
    at com.xtremelabs.robolectric.res.XpathResourceXmlLoader.processResourceXml(XpathResourceXmlLoader.java:27)
    at com.xtremelabs.robolectric.res.DocumentLoader.loadResourceXmlFile(DocumentLoader.java:58)
    at com.xtremelabs.robolectric.res.DocumentLoader.loadResourceXmlDir(DocumentLoader.java:52)
    at com.xtremelabs.robolectric.res.DocumentLoader.loadResourceXmlDir(DocumentLoader.java:39)
    at com.xtremelabs.robolectric.res.ResourceLoader.loadValueResourcesFromDir(ResourceLoader.java:142)
    at com.xtremelabs.robolectric.res.ResourceLoader.loadValueResourcesFromDirs(ResourceLoader.java:136)
    at com.xtremelabs.robolectric.res.ResourceLoader.loadValueResources(ResourceLoader.java:109)
    at com.xtremelabs.robolectric.res.ResourceLoader.init(ResourceLoader.java:85)
    at com.xtremelabs.robolectric.res.ResourceLoader.getStringValue(ResourceLoader.java:271)
    at com.xtremelabs.robolectric.shadows.ShadowResources.getString(ShadowResources.java:56)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.xtremelabs.robolectric.bytecode.ShadowWrangler.methodInvoked(ShadowWrangler.java:87)
    at com.xtremelabs.robolectric.bytecode.RobolectricInternals.methodInvoked(RobolectricInternals.java:110)
    at android.content.res.Resources.getString(Resources.java)
    [...]

Тест следует.

import static org.junit.Assert.assertEquals;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

import com.xtremelabs.robolectric.RobolectricTestRunner;

@RunWith(RobolectricTestRunner.class)
public class TelephoneDirectoryTest {
    private TelephoneDirectory activity;

    @Before
    public void setUp() {
        activity = new TelephoneDirectory();
    }

    @Test
    public void searchButtonLabelShouldBeGo() throws Exception {
        String goLabel = activity.getResources().getString(R.string.search);
        assertEquals("Go", goLabel);

    }
}

Кажется, он не может найти папку Android ./res. Я указал конфигурацию JUnit на ${workspace_loc:teldir-android}, как сказано в руководстве. И это заставляет Eclipse найти AndroidManifest.xml, избегая других ошибок, imho.

Пытаясь избежать этого исключения, я также добавил папку ./res в качестве исходной папки моего приложения для Android, очистил и перезапустил все, но возникло то же исключение.

Что я делаю не так?

Ответы [ 6 ]

6 голосов
/ 21 октября 2012

Мне пришлось добавить переменную среды в конфигурацию моего тестового запуска:

ANDROID_HOME=C:/path/to/android-sdks
4 голосов
/ 12 июля 2011

У меня была точно такая же проблема (RuntimeException при загрузке ресурсов) при первой настройке моего проекта Eclipse с Robolectric, но теперь он работает.

Я понял две вещи:

  • Если вы получили WARNING: Unable to find path to Android SDK (сообщение может не отображаться в версии ниже 1.0-RC1), то ResourceLoader не удалось найти ваш корень SDK.Один из методов ищет переменную окружения ANDROID_HOME, которая должна указывать, где находится ваш Android SDK.
  • Наконец, существует ошибка , которая вызывает исключение, если ваш menu.xmlне отформатирован определенным образом.

Использование Robolectric без Maven или Ant возможно, но может быть еще несколько ошибок. Это видео показывает правильную настройку проекта.Если это не работает, получите последнюю версию от Github (импортируйте как проект Maven в Eclipse, и вам может понадобиться github.com / mosabua / maven-android-sdk-deployer ) и начните отладку!

1 голос
/ 03 июля 2013

Если ResourceNotFound встречается только для строковых массивов, определенных тегами <array>...</array>, замените их на <string-array>...</string-array>

Использование робоэлектрика 2.0

читается в: https://groups.google.com/forum/#!topic/robolectric/gQoY0bCguYs

документы: http://developer.android.com/guide/topics/resources/string-resource.html#StringArray

0 голосов
/ 11 марта 2015

Вы можете получить файл Jar по этой ссылке. Просто скачайте его. добавить JAR в проект Вот и все. Я использовал в моем проекте. Любые сомнения спрашивают меня

http://www.java2s.com/Code/JarDownload/robolectric/robolectric-1.2-8.jar.zip

0 голосов
/ 09 мая 2013

Только что возникла эта проблема после новой установки Windows 8. Скорее всего, Robolectric не может найти SDK. Для того, чтобы указать его в нужном месте. Вы можете создать файл local.properties в своем проекте Android. Это можно сделать в командной строке, перейдя в корневую папку вашего проекта и введя команду:

android update project –p c:\project\root\folder

Откройте local.properties, чтобы убедиться, что sdk.dir указывает на ожидаемый путь.

Также убедитесь, что вы загрузили Android API уровня 8. Robolectric ищет папку в каталоге /path/to/your/sdk/platforms/android-8.

0 голосов
/ 17 марта 2011

Очевидно, что это неправильно .. Мне пришлось настроить способ муравья, потому что вы не можете запускать робоэлектрические тесты из Eclipse, поскольку рабочая область Eclipse по-прежнему не распознает отдельные файлы со связанными источниками должным образом.

https://github.com/shareme/Wabash

Та же ошибка, которую я получаю, кстати .. из указаний Pivotal Labs ..

...