Domanda

Ho appena configurato un progetto di test per la mia app Android per l'uso Robolectric. Ho seguito la Eclipse rapida . Viene sollevata un'eccezione eseguendo la mia semplice primo test.

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

La prova seguente.

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

    }
}

Sembra che non riesce a trovare la cartella ./res Android. Ho fatto la configurazione JUnit per ${workspace_loc:teldir-android} come dice la guida. E questo rende Eclipse per trovare la AndroidManifest.xml, evitando altri errori, imho.

Cercando di evitare questa eccezione Ho anche aggiunto cartella ./res come cartella di origine del mio app Android, puliti e rilanciato tutto, ma la stessa eccezione sollevata.

Che cosa sto facendo di sbagliato?

È stato utile?

Soluzione

ho dovuto aggiungere una variabile d'ambiente alla mia configurazione di esecuzione di test:

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

Altri suggerimenti

Ho avuto lo stesso problema esatto (RuntimeException durante il caricamento delle risorse) al momento della prima messa in mio progetto Eclipse con Robolectric ma ora funziona.

ho capito due cose:

  • Se si riceve un WARNING: Unable to find path to Android SDK (il messaggio potrebbe non essere visualizzato in una versione inferiore a 1.0-RC1) poi ResourceLoader non è riuscito a trovare la radice SDK. Uno dei metodi cerca una variabile d'ambiente ANDROID_HOME che dovrebbe puntare a dove i vostri risiede SDK Android.
  • Infine, v'è una bug che causa un'eccezione se il vostro è menu.xml non formattato in un certo modo.

Utilizzando Robolectric senza Maven o Ant è possibile, ma ci potrebbe essere qualche bug. Questo mostra il video della configurazione progetto corretto. Se non funziona, scaricare l'ultima versione da Github (importazione come progetto Maven in Eclipse e potrebbe essere necessario github.com/mosabua/maven-android-sdk-deployer ) e iniziare il debug!

Se il resourceNotFound si verifica solo per gli array di stringhe definite con i tag <array>...</array>, sostituirli con <string-array>...</string-array>

Utilizzando robolectric 2.0

leggi in: https://groups.google.com/forum/# ! argomento / robolectric / gQoY0bCguYs

docs: http://developer.android.com/ guida / argomenti / risorse / string-resource.html # StringArray

Il suo male obviously..I doveva impostare un modo formica per fare le cose come non è possibile avviare i test robolectric da Eclipse, come l'area di lavoro di Eclipse continua a non riconoscere legata-source file singoli properly..see mio esempio alpha:

https://github.com/shareme/Wabash

Lo stesso errore che ricevo dal way..from della Pivotal Labs direzioni ..

Sono appena tornata da questo problema dopo aver fatto una nuova installazione di Windows 8. Molto probabilmente Robolectric non riesce a trovare l'SDK. Al fine di puntare al posto giusto. È possibile generare un file local.properties nel progetto Android. Questo può essere fatto nella riga di comando andando alla cartella principale del progetto e il comando:

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

Apri local.properties per verificare la sdk.dir punta al percorso previsto.

Inoltre, assicurarsi che hai scaricato livello di API Android 8. sguardi Robolectric per una cartella nella directory /path/to/your/sdk/platforms/android-8.

È possibile ottenere il file JAR in questo link.just scaricarlo. aggiungi JAR nel progetto thats it.i hanno utilizzato nel mio progetto. Tutti i dubbi mi chiedono

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top