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:
- ¿Cómo puedo crear una suite de pruebas de Android que sólo ejecuta pruebas especificadas en una o más clases?
- Cómo probar interfaz de escucha se llama dentro de pruebas de unidad de Android
- Prueba de unidad de android: borrar prefs antes de la actividad de prueba
- ¿Es posible probar una actividad abstracta con Robolectric
- Agrupación de pruebas roboeléctricas utilizando junit Category en un proyecto gradle de Android
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.InstrumentationTestRunner} 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'
- Excepción en el subproceso "main" java.lang.NoClassDefFoundError: junit / textui / ResultPrinter
- Robolectric's Shadow Object y Mocking
- Cómo ejecutar swipe con appium en Java para la aplicación nativa de Android
- Creación de un proyecto de prueba de Android en Eclipse
- Intento de trozo de clase de actividad de Android con PowerMockito lanza RuntimeException "Stub!"
- ¿Cómo puedo crear una estructura de prueba en Android Studio?
- Uso de Mockito Matchers.any () con android.support.annotation.IntDef anotación personalizada
- Android Studio JUnit pruebas Java puro
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(); }
- SecurityException: Invocación de Binder a una interfaz incorrecta en APK firmado
- Observado paquete de add-ons "google_apis-google-19" en una ubicación incoherente