Dado un proyecto de Android en Eclipse compilación a partir de 2 proyectos: Project 1 es una biblioteca Java, que compila muy bien en Android. El Proyecto 2 son casos de prueba para la biblioteca, esencialmente clases que se extienden a AndroidTestCase
y que arrojan resultados a la consola de Android. El Proyecto 1 es un proyecto Java, el Proyecto 2 es un proyecto Android dependiendo del Proyecto 1.ejecución android testcase desde Eclipse vs. consola instrumentación remota
Descripción del problema: Si ejecuto las pruebas de Eclipse como pruebas JUnit de Android corren como deberían, sin errores. Sin embargo, si quiero ejecutar de nuevo por la línea de comandos:
adb shell am instrument -w bla.bla/android.test.InstrumentationTestRunner
consigo una gran cantidad de
Cannot load class. Make sure it is in your apk. Class name: xyz
java.lang.ClassNotFoundException: xyz
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:234)
at android.test.ClassPathPackageInfoSource.createPackageInfo
....
Caused by: java.lang.ClassNotFoundException: xyz in loader
dalvik.system.PathClassLoader[/system/framework/android.test.runner.jar:/data/app/bla.apk]
at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
....
errores en Logcat.
Observaciones: Eclipse instala la .apk. Más tarde ejecuto el mismo .apk ya instalado, por lo que las clases disponibles deben ser las mismas. Las clases se solicitan dinámicamente con Class c = Class.forName("xyz")
.
Así que mi pregunta es, ¿cómo Eclipse ejecuta el archivo .apk instalado de manera diferente para que las clases adecuadas se encuentren en el tiempo de ejecución?
¿Puedo sugerir una forma mejor de probar su aplicación Android? Yo uso esto y es genial: http://pivotal.github.com/robolectric/. Sin emulador, sin proyecto de prueba por separado ... y puedo hacer TDD, iterando rápidamente. –