Se ha producido un error en la ejecución de la prueba: La ejecución de la instrumentación ha fallado debido a 'java.lang.ClassNotFoundException'
Esta es la primera vez que configuro un android test project
de prueba de android project
para probar un android project
.
He creado un caso de prueba muy básico que estoy tratando de ejecutar, sin embargo lo que tengo no se ejecuta. Tengo una Test run failed: Instrumentation run failed due to 'java.lang.ClassNotFoundException'
.
- Android y Javadoc: @inheritDoc no funciona
- No se puede abrir el directorio de datos en el teléfono Android con raíz
- Más Eclipse ADT Insanity! Logcat se ha desconectado completamente
- Integración de Unity y Eclipse
- Eclipse: un proyecto PhoneGap para iPhone y Android?
Yo solucionaría esto más, sin embargo no consigo más información, como la clase que está tratando de encontrar, etc ¿Ideas sobre cómo obtener más información del error? ¿Cualquier área común que debo mirar, o cualquier cosa que pudiera necesitar ser configurado que estoy pasando por alto?
A continuación se muestra la información de la consola:
[2013-04-16 13:21:49 - XyzProgramTest] Android Launch! [2013-04-16 13:21:49 - XyzProgramTest] adb is running normally. [2013-04-16 13:21:49 - XyzProgramTest] Performing android.test.InstrumentationTestRunner JUnit launch [2013-04-16 13:21:49 - XyzProgramTest] Automatic Target Mode: launching new emulator with compatible AVD 'GalaxyNexusAPI_17' [2013-04-16 13:21:49 - XyzProgramTest] Launching a new emulator with Virtual Device 'GalaxyNexusAPI_17' [2013-04-16 13:21:53 - Emulator] extension WGL_ARB_make_current_read was not found [2013-04-16 13:21:53 - Emulator] extension WGL_EXT_swap_control was not found [2013-04-16 13:21:53 - Emulator] Failed to create pbuf surface for FB 0x3004 [2013-04-16 13:21:53 - Emulator] emulator: WARNING: Could not initialize OpenglES emulation, using software renderer. [2013-04-16 13:21:54 - XyzProgramTest] New emulator found: emulator-5554 [2013-04-16 13:21:54 - XyzProgramTest] Waiting for HOME ('android.process.acore') to be launched... [2013-04-16 13:22:55 - XyzProgramTest] HOME is up on device 'emulator-5554' [2013-04-16 13:22:55 - XyzProgramTest] Uploading XyzProgramTest.apk onto device 'emulator-5554' [2013-04-16 13:22:55 - XyzProgramTest] Installing XyzProgramTest.apk... [2013-04-16 13:23:57 - XyzProgramTest] Success! [2013-04-16 13:23:57 - XyzProgramTest] Project dependency found, installing: XyzProgram [2013-04-16 13:23:57 - XyzProgram] Uploading XyzProgram.apk onto device 'emulator-5554' [2013-04-16 13:23:58 - XyzProgram] Installing XyzProgram.apk... [2013-04-16 13:24:05 - XyzProgram] Success! [2013-04-16 13:24:05 - XyzProgramTest] Launching instrumentation android.test.InstrumentationTestRunner on emulator-5554 [2013-04-16 13:24:07 - XyzProgramTest] Test run failed: Instrumentation run failed due to 'java.lang.ClassNotFoundException'
Notas adicionales:
En mi android test project
, he creado una prueba sencilla con un paquete similar al del paquete que coincide con la clase que intento probar en mi android project
. Así que algo como com.company.android.projectname
. Lo he especificado en la sección de instrumentation
del archivo de manifest
android test project
.
<instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.company.android.projectname" />
Cuando cambié esto para emparejar eso, consigo un nuevo error que dice que la Test run failed: Unable to find instrumentation target package: com.company.android.projectname
No estoy 100% seguro de lo que targetPackage
debe ser y si necesito múltiples instrumentaciones para cada paquete que quiero probar, etc Cuando lo configuro para com.company.android
que es cuando recibo el java.lang.ClassNotFoundException
. Cualquier sugerencia sería apreciada, mientras tanto continuaré mis esfuerzos para resolver esto por mi cuenta.
- Versión de la aplicación de Android: versión de Min SDK
- Cómo utilizar Android Design Pack proporcionado por Google con Eclipse
- Android: no se puede importar BaseGameUtils con éxito en Eclipse
- NullPointerException en getActivity (). RunOnUiThread (nuevo Runnable () {
- Cómo administrar varias ediciones de la misma aplicación android
- Error al abrir el Eclipse Android Layout Editor
- Actualización de Eclipse no funciona
- Cambio de la variable de entorno de origen en eclipse
Calculado mi problema y estoy publicando la respuesta para fines de documentación …
La raíz de mi problema era 2 cosas diferentes:
- Hice un poco de refactorización, que cambia la ubicación de mi clase
android.app.Application
y mis actividades. Esto lo hizo así que mi programa principal no funcionaba ya que necesitaba actualizar mi manifiesto en miandroid project
. - Después de hacer las actualizaciones de mi manifiesto en mi proyecto de Android, tuve que hacer algunas actualizaciones en mi
android test project
para señalar a la ubicación actualizada de la clase que se extiendeandroid.app.Application
.
Después de eso, hizo algunos limpia y probó de nuevo y las cosas eran buenas.
FYI me encontré con esto y tuve que añadir
<uses-library android:name="android.test.runner"/>
dentro de mi etiqueta <application/>
Tuve este problema después de una fusión, en el que build.gradle estaba especificando el paquete de prueba equivocado, ya que había estado utilizando el valor predeterminado.
Simplemente eliminando estas líneas de build.gradle, fue capaz de encontrar las clases necesarias en el paquete predeterminado, que es src/androidTest
.
sourceSets { instrumentTest.setRoot('src/instrumentTest') } //removed this to use the default androidTest source set.
Esto probablemente no será la solución exacta, pero con suerte guía a alguien en la dirección correcta.
He encontrado este problema hoy, he adoptado android-specific ant build.xml que sentado en el directorio "$ {sdk.dir} / tools / ant /" para realizar todos los casos de prueba en la línea de comandos, pero el STDOUT informa de error para mí como el tuyo:
vinceMacBook ~/dev/aSQLite+-android/tests$ ant clean uninstall debug install test ... test: [echo] Running tests ... [exec] INSTRUMENTATION_RESULT: shortMsg=java.lang.ClassNotFoundException [exec] INSTRUMENTATION_RESULT: longMsg=java.lang.ClassNotFoundException: android.test.InstrumentationTestRunner [exec] INSTRUMENTATION_CODE: 0
Me paso un tiempo para averiguar esto, encontré la causa principal debido en el módulo de la raíz AndroidManifest.xml
, pensé que el elemento de aplicación no es nada para ser configurado por lo que omitió en el elemento de manifiesto , que causan mi problema.
No estoy seguro de compartir la misma estructura conmigo, por lo que publicar mi estructura de proyecto aquí, también el contenido del archivo clave, la esperanza puede ayudar a alguien.
vinceMacBook ~/dev/aSQLite+-android$ tree . ├── AndroidManifest.xml │ <?xml version="1.0" encoding="utf-8"?> │ <manifest │ xmlns:android="http://schemas.android.com/apk/res/android" │ package="com.vincestyling.asqliteplus" │ android:versionCode="1" │ android:versionName="0.1"> │ │ <uses-sdk android:minSdkVersion="8" /> │ │ <!-- important configuration, cannot be omit even if nothing to say. --> │ <application /> │ │ </manifest> │ ├── build.xml │ unchanged, generated by "android create project <project_name>" command. │ ├── project.properties │ unchanged, generated by "android create project <project_name>" command. │ ├── src │ └── com │ └── vincestyling │ └── asqliteplus │ ├── DBOperator.java │ ├── DBOverseer.java │ └── the library source code lie here... │ └── tests ├── AndroidManifest.xml │ <?xml version="1.0" encoding="utf-8"?> │ <manifest │ xmlns:android="http://schemas.android.com/apk/res/android" │ package="com.vincestyling.asqliteplus.tests"> │ │ <application> │ <uses-library android:name="android.test.runner"/> │ </application> │ │ <instrumentation │ android:name="android.test.InstrumentationTestRunner" │ android:targetPackage="com.vincestyling.asqliteplus"/> │ │ </manifest> │ ├── ant.properties │ # [Comments], [Comments], [Comments] which generated by command. │ # [Comments], [Comments], [Comments] which generated by command. │ # [Comments], [Comments], [Comments] which generated by command. │ │ # important configuration, point to the root library module. │ tested.project.dir=../ │ ├── build.xml │ unchanged, generated by "android create test-project <project_name>" command. │ └── src └── com └── vincestyling └── asqliteplus ├── BaseDBTest.java ├── QueryStatementTest.java └── the test source code lie here...
Mi estructura del proyecto siguió la descripción de los proyectos de la prueba del androide que Google nos sugiere para hacer, consisten en el módulo de la biblioteca de la raíz que llevando la lógica de la base, y el módulo de la prueba que dentro del módulo de la raíz. Arriba están los recursos clave en el proyecto, pero no todos los archivos, voy a publicar el vínculo del proyecto aquí una vez que lo suelten.
———— Actualización 2014-01-06 ————–
Actualmente, mi proyecto se publicó en mi github: aSQLitePlus-android , compruebe los detalles si está interesado.
- Android: error al cargar la biblioteca
- AppWidgetManager getAppWidgetIds devolviendo identificadores de Widget antiguos