unit tests test studio que mock example activity android instrumentation

tests - android.util.AndroidException: INSTRUMENTATION_FAILED:



test implementation android (3)

Tengo una aplicación para Android simple y la estoy probando con mi teléfono. Entonces, hay dos maneras de hacer eso:

  1. Usando eclipse
  2. Utilizando CLI

Problema:

Cuando ejecuto el caso de prueba unitaria usando Eclipse, instala la aplicación en mi teléfono en tiempo de ejecución y ejecuto la prueba junit y luego, si uso el comando en la CLI: adb -d shell am instrument -w com.abc.xyz.test / android.test .InstrumentationTestRunner, funciona bien.

Sin embargo, si ejecuto directamente el comando anterior en CLI sin ejecutar primero los casos de prueba de la unidad en Eclipse, obtengo un error:

android.util.AndroidException: INSTRUMENTATION_FAILED: com.abc.xyz.test/android.test.InstrumentationTestRunner at com.android.commands.am.Am.runInstrument(Am.java:586) at com.android.commands.am.Am.run(Am.java:117) at com.android.commands.am.Am.main(Am.java:80) at com.android.internal.os.RuntimeInit.finishInit(Native Method) at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:263) at dalvik.system.NativeStart.main(Native Method) INSTRUMENTATION_STATUS: id=ActivityManagerService INSTRUMENTATION_STATUS: Error=Unable to find instrumentation target package: com.abc.xyz INSTRUMENTATION_STATUS_CODE: -1

AndroidMAnifest.xml contiene:

android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.abc.xyz" inside instrumentation tag

Podría alguien ayudarme por favor


Asegúrese de desinstalar la aplicación anterior y reinstalar o iniciar la prueba solo después de desinstalar la aplicación anterior


Supongo que lo habrás resuelto desde enero, pero trabajo con herramientas de línea de comandos, encontré un problema similar (el mensaje de error es diferente) y lo resolví como lo explico en los siguientes pasos. Realizo todo el proceso desde la creación de un proyecto ficticio con su prueba vacía hasta una ejecución de prueba exitosa. Espero que pueda ser de utilidad para alguien:

Primer paso , crea el proyecto:

android create project --name MyExample --target "Google Inc.:Google APIs:17" --path MyExample --package com.example --activity MyExampleActivity

Segundo paso , crear proyecto de prueba:

android create test-project --path MyExampleTest --name MyExampleTest --main ../MyExample

Tercer paso , acceda al directorio de su proyecto, compílelo y verifique que el proceso finalice con éxito:

cd MyExample && ant debug

Cuarto paso , instálalo en el emulador:

adb -s emulator-5554 install -r bin/MyExample-debug.apk

Quinto paso , acceda a su directorio de proyecto de prueba e intente ejecutar las pruebas:

cd ../MyExampleTest && adb shell am instrument -w com.example.tests/android.test.InstrumentationTestRunner

Eso rinde:

INSTRUMENTATION_STATUS: id=ActivityManagerService INSTRUMENTATION_STATUS: Error=Unable to find instrumentation info for: ComponentInfo{com.example.tests/android.test.InstrumentationTestRunner} INSTRUMENTATION_STATUS_CODE: -1 android.util.AndroidException: INSTRUMENTATION_FAILED: com.example.tests/android.test.InstrumentationTestRunner at com.android.commands.am.Am.runInstrument(Am.java:676) at com.android.commands.am.Am.run(Am.java:119) at com.android.commands.am.Am.main(Am.java:82) at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method) at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:235) at dalvik.system.NativeStart.main(Native Method)

Sexto paso , haga una lista de sus clases de instrumentación y asegúrese de que falte su proyecto actual:

adb shell pm list instrumentation

Eso en mi máquina da lugar a:

instrumentation:com.android.emulator.connectivity.test/android.test.InstrumentationTestRunner (target=com.android.emulator.connectivity.test) instrumentation:com.android.emulator.gps.test/android.test.InstrumentationTestRunner (target=com.android.emulator.gps.test) instrumentation:com.android.example.spinner.tests/android.test.InstrumentationTestRunner (target=com.android.example.spinner) instrumentation:com.android.smoketest.tests/com.android.smoketest.SmokeTestRunner (target=com.android.smoketest) instrumentation:com.android.smoketest.tests/android.test.InstrumentationTestRunner (target=com.android.smoketest) instrumentation:com.example.android.apis/.app.LocalSampleInstrumentation (target=com.example.android.apis)

Como puede ver, la instrumentación para com.example.tests no existe, por lo que tendremos que crearla.

Séptimo paso , construya su proyecto de prueba y verifique que lo hizo con éxito:

ant debug

En octavo paso , instálalo en el emulador:

adb -s emulator-5554 install -r bin/MyExampleTest-debug.apk

Noveno paso , enumere sus clases de instrumentación y busque la de su proyecto:

adb shell pm list instrumentation

Eso rinde:

instrumentation:com.android.emulator.connectivity.test/android.test.InstrumentationTestRunner (target=com.android.emulator.connectivity.test) instrumentation:com.android.emulator.gps.test/android.test.InstrumentationTestRunner (target=com.android.emulator.gps.test) instrumentation:com.android.example.spinner.tests/android.test.InstrumentationTestRunner (target=com.android.example.spinner) instrumentation:com.android.smoketest.tests/com.android.smoketest.SmokeTestRunner (target=com.android.smoketest) instrumentation:com.android.smoketest.tests/android.test.InstrumentationTestRunner (target=com.android.smoketest) instrumentation:com.example.tests/android.test.InstrumentationTestRunner (target=com.example) instrumentation:com.example.android.apis/.app.LocalSampleInstrumentation (target=com.example.android.apis)

Mire el segundo al último, instrumentation:com.example.tests , es lo que queríamos.

Décimo paso , ejecuta tus pruebas:

adb shell am instrument -w com.example.tests/android.test.InstrumentationTestRunner

Eso rinde:

Test results for InstrumentationTestRunner= Time: 0.0 OK (0 tests)

Eso es todo. Ahora implementa tus pruebas, compila e instala como de costumbre. Además puedes eliminarlos como:

adb shell pm uninstall com.example.tests

Pero tendrá que volver a crear clases de instrumentación para evitar el mismo error.


Una explicación / enfoque más preciso es el siguiente:

Asegúrate de hacer

adb install -r bin/<>-debug.apk

Tanto desde las pruebas como desde el directorio de la aplicación.

Después de esa ant test debería trabajar desde el directorio de pruebas. (Supongo que faltaba una dependencia a la aplicación del paquete de prueba, lo que estaba causando el error).

Aparte del pequeño truco anterior, el resto del procedimiento que seguí provino de la introducción de pruebas de Android en http://developer.android.com/ .