Soy nuevo en Android Testing stuff. Me gustaría probar si al hacer clic en un botón se abre una actividad correspondiente o no. Hice algunas investigaciones y descubrí que necesitaré usar ActivityManager para hacer la verificación.Cómo llamar a Button.performClick en el caso de prueba JUnit de Android?
El problema es que no puedo hacer funcionar la parte de "hacer clic". Estoy tratando de usar Button.performClick()
.
Inicialmente acabo de llamar a esta función y recibí un error al decir que no puedo hacer esto en el hilo actual. Después de buscar en Google descubrí que necesito llamarlo en el hilo de la interfaz de usuario, y me encontré con runOnUiThread(Runnable r) method
.
El botón que estoy intentando hacer clic es _helloButton_
. Esto se obtiene en el _setUp()_ method
. Hice _assertNotNull_
reviso esto para asegurarme de que esté ahí.
Dentro de un método de ensayo, me llaman
mActivity.runOnUiThread(new Runnable() {
public void run() {
helloButton.requestFocus();
}
});
helloButton.performClick();
y me da una NPE en la línea llamando requestFocus()
.
siguiente que intentó
mActivity.runOnUiThread(new Runnable() {
public void run() {
helloButton.performClick();
}
});
y aún así obtener la misma excepción de puntero nulo.
En la perspectiva de JUnit, me sale este mensaje
Test failed to run to completion. Reason: 'Instrumentation run failed due to 'java.lang.NullPointerException''. Check device logcat for details
Y el StackTrace tener este aspecto.
08-05 19:03:11.922: ERROR/AndroidRuntime(578): Uncaught handler: thread main exiting due to uncaught exception
08-05 19:03:11.922: ERROR/AndroidRuntime(578): java.lang.NullPointerException
08-05 19:03:11.922: ERROR/AndroidRuntime(578): at com.example.helloworldmk2.test.HelloWorldMK2Test$1.run(HelloWorldMK2Test.java:57)
08-05 19:03:11.922: ERROR/AndroidRuntime(578): at android.os.Handler.handleCallback(Handler.java:587)
08-05 19:03:11.922: ERROR/AndroidRuntime(578): at android.os.Handler.dispatchMessage(Handler.java:92)
08-05 19:03:11.922: ERROR/AndroidRuntime(578): at android.os.Looper.loop(Looper.java:123)
08-05 19:03:11.922: ERROR/AndroidRuntime(578): at android.app.ActivityThread.main(ActivityThread.java:4363)
08-05 19:03:11.922: ERROR/AndroidRuntime(578): at java.lang.reflect.Method.invokeNative(Native Method)
08-05 19:03:11.922: ERROR/AndroidRuntime(578): at java.lang.reflect.Method.invoke(Method.java:521)
08-05 19:03:11.922: ERROR/AndroidRuntime(578): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
08-05 19:03:11.922: ERROR/AndroidRuntime(578): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
08-05 19:03:11.922: ERROR/AndroidRuntime(578): at dalvik.system.NativeStart.main(Native Method)
línea 57 es donde yo estoy llamando a la helloButton.performClick()
.
No estoy seguro de por qué estoy recibiendo NPE; assertNotNull pasa sin problema. Si me pueden ayudar con este problema, realmente lo agradecería. Gracias por adelantado.
EDITAR: Estoy subclasando ActivityInstrumentationTestCase2 para esta clase de prueba en particular.
EDIT2: Logcat vomita algunos errores antes de que ocurra NPE.
veo
08-05 20: 08: 54.702: ERROR/Android Runtime (754): ERROR: Hilo de adjuntar no
y
08-05 20: 08: 58.642: ERROR/gralloc (52): [anular el registro] manejar 0x3e1b28 aún bloqueado (estado = 40000001)
Para mayor claridad, desea presionar un botón que activará el lanzamiento de una nueva actividad? –
sí. El botón tiene un onClickListener, que inicia otra actividad. –