Se ha producido un error en la ejecución de la prueba: La ejecución de la instrumentación ha fallado debido a que "Proceso se ha estropeado". Al probar varias actividades de Android

Tengo un problema con la prueba de mi aplicación Android.
Tengo 2 clase testCase, si los ejecuto por separado, no hay ningún problema, las pruebas se ejecutan hasta el final. Pero si hago "clic derecho" en mi proyecto de prueba y elijo "Ejecutar como Android Junit Test" Tengo un mensaje

Launching instrumentation android.test.InstrumentationTestRunner on device emulator-5554 [2012-03-27 15:56:27 - matroussedemaquillageTest] Collecting test information [2012-03-27 15:56:31 - matroussedemaquillageTest] Test run failed: Instrumentation run failed due to 'Process crashed.' 

Ver abajo para mis dos clases de prueba:

La primera clase de prueba

 package fr.smardine.matroussedemaquillage.test; import android.test.ActivityInstrumentationTestCase2; import android.widget.ImageSwitcher; import fr.smardine.matroussedemaquillage.EntryPoint; public class EntryPointTest extends ActivityInstrumentationTestCase2<EntryPoint> { private EntryPoint mActivity; private ImageSwitcher mSwitcher; public EntryPointTest() { super("fr.smardine.matroussedemaquillage", fr.smardine.matroussedemaquillage.EntryPoint.class); } @Override protected void setUp() throws Exception { super.setUp(); } @Override protected void tearDown() throws Exception { super.tearDown(); } public void test2() { assertEquals(2, 2); } } 

y el segundo:

 package fr.smardine.matroussedemaquillage.test; import android.test.ActivityInstrumentationTestCase2; import android.widget.ImageView; import fr.smardine.matroussedemaquillage.Main; public class MainTest extends ActivityInstrumentationTestCase2<Main> { private Main mActivity; private ImageView btRemplir; private ImageView btPerime; private ImageView btNotes; public MainTest() { super("fr.smardine.matroussedemaquillage", fr.smardine.matroussedemaquillage.Main.class); } @Override protected void setUp() throws Exception { super.setUp(); } @Override protected void tearDown() throws Exception { super.tearDown(); } public void test1() { assertEquals(1, 1); } } 

Como se puede ver mi prueba no son tan complicados, incluso si yo "borrar datos de usuario" cuando inicio mi emulador, hay el mismo mensaje si ejecuto las dos pruebas.
Oh, por cierto, el emulador se ejecuta en android 2.1 y este es mi archivo AndroidManifest.xml:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="fr.smardine.matroussedemaquillage.test" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="7" /> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="fr.smardine.matroussedemaquillage" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <uses-library android:name="android.test.runner" /> </application> </manifest> 

Editar: mi gato de registro:

 I/ActivityManager(64): Start proc fr.smardine.matroussedemaquillage for added application fr.smardine.matroussedemaquillage: pid=510 uid=10029 gids={3003, 1015} D/ddm-heap(510): Got feature list request D/dalvikvm(510): GC freed 5427 objects / 420224 bytes in 90ms D/dalvikvm(510): GC freed 6498 objects / 506616 bytes in 79ms D/dalvikvm(510): GC freed 7048 objects / 567464 bytes in 90ms D/dalvikvm(510): GC freed 8628 objects / 503840 bytes in 73ms I/System.out(510): Failed to open test.properties I/AndroidRuntime(510): AndroidRuntime onExit calling exit(-1) – D/Zygote(30): Process 510 exited cleanly (255) I/ActivityManager(64): Process fr.smardine.matroussedemaquillage (pid 510) has died. W/ActivityManager(64): Crash of app fr.smardine.matroussedemaquillage running instrumentation ComponentInfo{fr.smardine.matroussedemaquillage.test/android.test.Instrumentatio‌​nTestRunner} D/ActivityManager(64): Uninstalling process fr.smardine.matroussedemaquillage D/AndroidRuntime(504): Shutting down VM D/dalvikvm(504): DestroyJavaVM waiting for non-daemon threads to exit D/dalvikvm(504): DestroyJavaVM shutting VM down D/dalvikvm(504): HeapWorker thread shutting down D/dalvikvm(504): HeapWorker thread has shut down D/jdwp(504): JDWP shutting down net... D/jdwp(504): Got wake-up signal, bailing out of select I/dalvikvm(504): Debugger has detached; object registry had 1 entries D/dalvikvm(504): VM cleaning up D/dalvikvm(504): LinearAlloc 0x0 used 643668 of 5242880 (12%) I/dalvikvm(504): JNI: AttachCurrentThread (from ???.???) E/AndroidRuntime(504): ERROR: thread attach failed' 

Solía ​​obtener este error cuando utilicé System.exit (0) en la prueba Actividad de onFinish como a continuación:

 @Override public void finish() { super.finish(); System.exit(0); } 

Por lo tanto, compruebe el método onFinish de su actividad principal.

También he encontrado este error. Sin embargo, acabé descubriendo que mi suite de pruebas se ejecutó, el único problema fue que un asert en mi código de prueba falló.

Busqué en LogCat y filtrar los mensajes Tagged "TestRunner" y encontré el mensaje de fallo de aserción entre otros registros de prueba.

También encontré problemas similares al ejecutar mi instrumentación de Android. Eventualmente terminé con la conclusión de que el problema es de System.exit (0) .

Ahora, la razón, por qué causa el problema De acuerdo con su documentación

Provoca que la máquina virtual deje de funcionar y que el programa salga.

Cuando se ejecuta System.exit (0) todo otro código escrito después de este código se omite y la clase de actividad se finaliza e ir a Garbage Collected. Dado que Instrumentation se basan en el método del ciclo de vida de la actividad, la clase de actividad es Garbage collect, no existe la posibilidad de llamar a sus métodos si el objeto en sí no existe.

Por lo tanto, evite utilizar System.exit (0) si desea realizar pruebas unitarias de la aplicación, utilice el método finish () .

En caso de que alguien más también está usando Robotium y vio el error: Olvidé a tearDown la actividad abierta, y esto resultó en el error como se describe anteriormente.

 public void tearDown() throws Exception { solo.finishOpenedActivities(); } 
  • Android Eclipse Plugin: Prueba de Instrumentación Runner no especificado
  • Prueba de fragmentos con Robolectric 3.0
  • Proxy transparente para probar las respuestas del servidor sin conexión en Android
  • Gradle JUnit Espresso en el emulador connectedAndroidTest java.lang.IncompatibleClassChangeError
  • Prueba de unidad Actividad.startService () llamada?
  • Android ejecutando script de hormigas en el dispositivo ejecutando casos de prueba y generando un informe de cobertura de código
  • Continúa el informe de cobertura de código jacoco después de un caso de prueba fallido
  • Diferencia entre InstrumentationTestCase y AndroidTestCase
  • Unidad de prueba SparseArray utilizando JUnit (utilizando JVM)
  • Robolectric InflateException al usar el diseño de barra de acción personalizada
  • Prueba de unidad AsyncTaskLoader con getLoaderResultSynchronously
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.