Prueba de ciclo de vida de la actividad de Android
Tengo Actividad, que es guardar sus datos en caso de que el sistema decida matarlo mientras está en segundo plano. Por lo tanto, tengo onSaveInstanceState:
@Override protected void onSaveInstanceState(Bundle outState){ outState.putString("value", "some_value"); }
Comprobar si el objeto Bundle es nulo en onCreate:
- Problemas con la ejecución de pruebas de unidad de actividad de Android desde Eclipse
- Robolectric y Android Studio 1.1.0 y pruebas de biblioteca
- Mono para Android: qué marcos de pruebas funcionan
- Prueba de unidad de Android con Retrofit y Mockito
- Valor de Stub de Build.VERSION.SDK_INT en la prueba de unidad local
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); isRestarted=(savedInstanceState==null);
¿Cómo escribo el método de prueba? Lo intenté
public void testRecreate(){ Instrumentation mInstr=this.getInstrumentation(); mInstr.callActivityOnSaveInstanceState(mActivity, null); mActivity.finish(); mActivity=this.getActivity(); assertEquals(false, mActivity.isRestarted); }
Pero parece que está mal.
- ActivityInstrumentationTestCase2 vs ActivityTestRule
- ¿Cómo acceder a los recursos en Android Unittest?
- Prueba de unidad en Android Studio: error "no escarnecido"
- Cómo emular onLowMemory ()?
- ¿La forma más simple de probar una unidad de una aplicación de la biblioteca de Android?
- Mocking un campo inyectado en las pruebas unitarias
- ¿Cómo puedo obtener Mockito trabajando en androidTest
- ¿Cómo probar una unidad que usa HttpClient en Android usando el marco incorporado?
Puede utilizar alguna funcionalidad de API oculta. En la configuración de su prueba, llame al
android.app.ActivityManagerNative.getDefault().setAlwaysFinish()
Método a través de la reflexión (porque es una API oculta) y confirmar que el valor se estableció correctamente mediante
android.provider.Settings.System.getInt(getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0)
A continuación, en la limpieza de prueba, vuelva a establecer esta configuración en false.
Habilitar el ajuste AlwaysFinish
hace que el sistema destruya las actividades tan pronto como ya no estén en la pantalla, desencadenando de inmediato el evento onSaveInstanceState. Para que este código funcione, necesitará los ALWAYS_FINISH
y WRITE_SETTINGS
.
Vea el código de la herramienta SetAlwaysFinish vinculada en este blog: Cómo probar onSaveInstanceState y onRestoreInstanceState en un dispositivo real
Para la prueba manual, esta rutina funciona:
- Inicie la actividad que desea probar
- Pulse el botón de menú de inicio en su dispositivo (actividad se detiene)
- Eliminar el proceso de DDMS (la actividad todavía no se destruye )
- Volver a traer la aplicación de la lista de aplicaciones recientes
Esto debería activar onCreate
nuevo en su actividad mientras no se reinicia la aplicación completa. Si no está guardando y cargando el estado correctamente, lo sabrá muy pronto.
Si usted no ha sido a través de él antes, me pareció que vale la pena hacerlo al menos una vez.
Cosas como esa podrían ser fácilmente probar usando robolectric . ¡Echale un vistazo!