Robolectric + Eclipse ¿No encuentra recursos?

Acabo de configurar un proyecto de prueba para mi aplicación de Android para utilizar Robolectric. He seguido el inicio rápido de Eclipse . Se levanta una excepción ejecutando mi primera prueba simple.

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 prueba sigue.

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

Parece que no puede encontrar la carpeta Android ./res . ${workspace_loc:teldir-android} la configuración de JUnit a ${workspace_loc:teldir-android} como dice la guía. Y esto hace que Eclipse encuentre el AndroidManifest.xml , evitando otros errores, imho.

Tratando de evitar esta excepción también agregó ./res carpeta como carpeta de origen de mi aplicación para Android, limpiado y relanzado todos, pero la misma excepción planteada.

¿Qué estoy haciendo mal?

Tuve que añadir una variable de entorno a mi configuración de ejecución de prueba:

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

Tuve exactamente el mismo problema (RuntimeException al cargar los recursos) al configurar por primera vez mi proyecto Eclipse con Robolectric, pero ahora funciona.

Me imaginé dos cosas:

  • Si recibe una WARNING: Unable to find path to Android SDK (el mensaje puede no aparecer en una versión inferior a 1.0-RC1), entonces ResourceLoader no pudo encontrar su raíz de SDK. Uno de los métodos busca una variable de entorno ANDROID_HOME que debe indicar dónde reside su SDK de Android.
  • Finalmente, hay un error que causa una excepción si su menu.xml no está formateado de una manera determinada.

El uso de Robolectric sin Maven o Ant es posible pero puede haber algunos errores más. Este video muestra la configuración correcta del proyecto. Si no funciona, obtenga la última versión de Github (importación como proyecto Maven en Eclipse y necesitará github.com/mosabua/maven-android-sdk-deployer ) y comience a depurar!

Si ResourceNotFound sólo se produce para los arrays de cadena definidos con <array>...</array> , reemplácelos por <string-array>...</string-array>

Uso de robolectric 2.0

Lea en: https://groups.google.com/forum/#!topic/robolectric/gQoY0bCguYs

Docs: http://developer.android.com/guide/topics/resources/string-resource.html#StringArray

Su obvio obvio .. tuve que configurar una forma de hormiga para hacer cosas como usted no puede iniciar pruebas robolectric de eclipse como el espacio de trabajo de Eclipse todavía no reconoce archivos de origen vinculados de forma adecuada … ver mi ejemplo alfa:

https://github.com/shareme/Wabash

El mismo error que recibo por el camino .. de las direcciones de los Laboratorios Pivotal.

Acabo de tener este problema después de hacer una nueva instalación de Windows 8. Lo más probable Robolectric no puede encontrar el SDK. Con el fin de apuntarlo al lugar correcto. Puede generar un archivo local.properties en su proyecto de Android. Esto se puede hacer en la línea de comandos, accediendo a la carpeta raíz de su proyecto y emitiendo el comando:

 android update project –pc:\project\root\folder 

Abra local.properties para verificar que sdk.dir apunta a la ruta esperada.

También asegúrese de que ha descargado el nivel de API de Android 8. Robolectric busca una carpeta en el directorio /path/to/your/sdk/platforms/android-8 .

Usted puede conseguir el archivo de Jar en este link.just descargarlo. Añadir JAR en el proyecto thats it.i han utilizado en mi proyecto. Cualquier duda me pregunta

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

  • Integración Roboeléctrica y Pepino
  • Uso de activos en pruebas roboeléctricas
  • Prueba JUnit con Robolectric: java.lang.InstantiationException
  • Mocking SQLite-Database durante la prueba de actividad con Robolectric
  • Robolectric: probar un ListView con el patrón ViewHolder causa NullPointerException
  • Robolectric vs Android Test Framework
  • Robolectric InflateException al utilizar la biblioteca de soporte v7 AlertDialog
  • Robolectric: Prueba de que una cancelación en el diálogo no inició nueva actividad
  • Robolectric 3.0 InflateException con un fragmento personalizado de mapa
  • Configurar la carpeta de prueba para las pruebas unitarias en el estudio de Android
  • No se pudieron determinar las dependencias para todas las tareas con robolectric gradle plugin
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.