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.
- Cómo probar que una intención ha sido difundida
- Gradle Robolectric Resources NotFoundException en pruebas
- Android instrumentación prueba java.lang.UnsatisfiedLinkError en el uso de AndroidJunitRunner y AndroidJUnit4
- ¿Cómo puedo probar fragmentos con Robolectric?
- Proyecto Android con Robolectric y Gradle (estudio Android)
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?
- Robolectric 3.0, no pudo probar una función que inicia un HandlerThread
- Agregue la información de la resolución al encargado del paquete de Robolectric
- ¿Existe una manera de escribir una prueba de unidad para una API de destino
- Servicios Roboeléctricos y de Intención
- Cómo utilizar gradle-android-test-plugin
- Robolectric lanza Recursos $ NotFoundException al intentar acceder al recurso en la carpeta raw
- Cómo utilizar Robolectric 2.4 en Android Studio 1.1.0 y gradle 2.2.1
- Necesito Robolectric y Mockito en mi prueba, cada uno propone su propio TestRunner
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), entoncesResourceLoader
no pudo encontrar su raíz de SDK. Uno de los métodos busca una variable de entornoANDROID_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