Frage

Ich habe gerade ein Testprojekt für meine Android -App konfiguriert, um Robolectric zu verwenden. Ich folgte dem Eclipse Schnellstart. Eine Ausnahme wird ausgelöst, um meinen einfachen allerersten Test auszuführen.

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)
    [...]

Der Test folgt.

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

    }
}

Es scheint, dass es Android nicht finden kann ./res Mappe. Ich habe die JUNIT -Konfiguration darauf hingewiesen ${workspace_loc:teldir-android} Wie der Führer sagt. Und das macht Sonnenfinsternis, um das zu finden AndroidManifest.xml, vermeiden andere Fehler, imho.

Ich versuche, diese Ausnahme zu vermeiden, fügte ich auch hinzu ./res Ordner als Quellordner meiner Android -App, reinigte und neu gestartet, aber dieselbe Ausnahme erhöhte.

Was mache ich falsch?

War es hilfreich?

Lösung

Ich musste meiner Test -Lauf -Konfiguration eine Umgebungsvariable hinzufügen:

ANDROID_HOME=C:/path/to/android-sdks

Andere Tipps

Ich hatte genau das gleiche Problem (RunTimeException beim Laden der Ressourcen) beim ersten Einrichten meines Eclipse -Projekts mit Robolectric, aber jetzt funktioniert es.

Ich habe zwei Dinge herausgefunden:

  • Wenn Sie eine erhalten WARNING: Unable to find path to Android SDK (Die Nachricht wird möglicherweise nicht in einer Version unter 1,0-RC1 angezeigt.) Dann wird ResourceLoader Ich habe Ihre SDK -Wurzel nicht gefunden. Eine der Methoden sucht nach einer ANDROID_HOME Umgebungsvariable, die darauf hinweisen sollte, wo sich Ihr Android -SDK befindet.
  • Schließlich gibt es eine Insekt Dies führt zu einer Ausnahme, wenn Ihr Menü.xml nicht auf eine bestimmte Weise formatiert ist.

Die Verwendung von Robolectric ohne Maven oder Ameise ist möglich, aber es gibt möglicherweise noch einige Fehler. Dies Das Video zeigt das richtige Projekt -Setup. Wenn es nicht funktioniert, holen Sie sich die neueste Version von GitHub (importieren Sie als Maven -Projekt in Eclipse, und Sie brauchen möglicherweise github.com/mosabua/maven-android-sdkdeployer) und fangen Sie an Debugging!

Wenn der ResourcenotFound nur für String -Arrays auftritt, die mit definiert mit definiert sind <array>...</array> Tags, ersetzen Sie sie durch <string-array>...</string-array>

Mit Robolectric 2.0

einlesen: https://groups.google.com/forum/#!topic/robolectric/gqoy0bcguys

Dokumente: http://developer.android.com/guide/topics/resources/string-resource.html#stringarray

Es ist offensichtlich falsch. Ich musste einen Ant-Weg einrichten, um Dinge zu tun, da Sie Robolectric-Tests aus Eclipse nicht starten können, da der Eclipse-Arbeitsbereich einzelne Dateien mit verknüpften Source nicht richtig erkennt. Sehen Sie mein Alpha-Beispiel:

https://github.com/shareme/wabash

Gleicher Fehler, den ich auf den Weg bekomme. Aus den zentralen Laboranweisungen ..

Ich hatte gerade dieses Problem, nachdem sie eine frische Installation von Windows 8 gemacht hatten. Robolectric kann das SDK nicht finden. Um es an den richtigen Ort zu zeigen. Sie können a generieren local.properties Datei in Ihrem Android -Projekt. Dies kann in der Befehlszeile erfolgen, indem Sie in den Stammordner Ihres Projekts gehen und den Befehl ausgeben:

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

Offen local.properties um die zu überprüfen sdk.dir zeigt auf den erwarteten Weg.

Stellen Sie außerdem sicher, dass Sie Android API Level 8 heruntergeladen haben. Robolectric sucht nach einem Ordner in der /path/to/your/sdk/platforms/android-8 Verzeichnis.

Sie können die JAR -Datei in diesem Link erhalten. Laden Sie sie einfach herunter. Fügen Sie Jar in das Projekt hinzu, das ist es. Ich habe in meinem Projekt verwendet. Irgendwelche Zweifel fragen mich

http://www.java2s.com/code/jardownload/robolectric/robolectric-1.2-8.jar.zip

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top