Robolectric + Eclipse non riesci a trovare le risorse?
-
27-10-2019 - |
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?
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) poiResourceLoader
non è riuscito a trovare la radice SDK. Uno dei metodi cerca una variabile d'ambienteANDROID_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