Anotaciones de prueba de Android con Robotium
Actualmente estoy construyendo una aplicación en Android, y usando Robotium para hacer pruebas funcionales (Por cierto, no utilice Robotium en nada menos que Android 1.6, es demasiado buggy).
Algunas de estas pruebas tienen una tendencia al azar a fallar, principalmente Robotium falta un campo de texto, o tiempo de espera, no leer el texto. Estoy tratando de usar la anotación @FlakyTest
, por lo que se ejecutará dos o tres veces antes de lanzar un error de prueba no. Sin embargo, la anotación no funciona, las pruebas no vuelven a ejecutarse después de un error.
- Robotium ClickOnButton (int ID) método hace que "junit.framework.AssertionFailedError: botón con índice 2131034130 no está disponible!"
- Excepción de seguridad mientras se prueba wifi en robotium
- Flujo desde la instalación hasta el desmontaje en robotio
- Tiempo de espera de prueba de robotium entre cada clic
- No puedo conseguir que mi actividad actual
Aquí es cómo estoy usando la anotación:
public class ClassName extends ActivityInstrumentationTestCase2<HomeActivity>{ @LargeTest @FlakyTest(tolerance=3) public void testMethod(){ //Here I run my roboitium scripts. } }
Luego lo ejecuto desde la línea de comandos:
Adb shell am instrumento -w com.jayway.test / android.test.InstrumentationTestRunner
Ni el eclipse ni la ejecución en línea de comandos de las pruebas tienen en cuenta la anotación de prueba escamosa. ¿Alguien ve un error con la forma en que intento aplicar @FlakyTest
?
- La prueba de Junit de Android falla con "Sólo el subproceso original que creó una jerarquía de vistas puede tocar sus vistas."
- Robotium solo waitForCondition
- Puede wifi ser encendido / apagado en caso de prueba a través de robotium
- Robotium_constructor mensaje obsoleto en el método NotepadTest para super
- ¿Cómo generar el informe de resultados de la prueba usando robotium?
- Lento o rápido arrastre hacia arriba (scroll) usando robotium
- ¿Cómo hacer clic en un botón, que se indexa en la posición 10 en ListView - robótica automatización?
- Robotium - personalizar la duración PAUSE en la clase Sleeper
No puedo ver ningún problema con su uso de la anotación @FlakyTest
.
Puse un caso de prueba rápido para probar @FlakyTest y Robotium (v2.2):
public class FlakyTestCase extends ActivityInstrumentationTestCase2<Main> { private static int count = 0; private Solo solo; public FlakyTestCase() { super("com.stackoverflow.example", Main.class); } @Override public void setUp() throws Exception { solo = new Solo(getInstrumentation(), getActivity()); } @LargeTest @FlakyTest(tolerance=3) public void testFlaky(){ Log.e("FlakeyTestCase", "Execution Count:" + ++count); solo.assertCurrentActivity(null,Main.class); solo.clickOnText("Doesn't Exist"); Log.e("FlakeyTestCase", "Shouldn't make it here"); } }
LogCat mostró los siguientes mensajes:
Execution Count: 1 Execution Count: 2 Execution Count: 3
Así que la anotación @FlakyTest
definitivamente fue invocada. El fallo (final) de la prueba se mostró como:
junit.framework.AssertionFailedError: The text: Doesn't Exist is not found!
Y el mensaje "Shouldn't make it here"
nunca fue registrado.
Por lo que puedo ver, no hay ningún problema con la forma en que ha declarado su anotación o cualquier problema con @FlakyTest
y @FlakyTest
, v2.2 de todos modos.
Tal vez hay un problema con otra parte de su código de prueba?
En general, al escribir pruebas para Android (con o sin Robotium) tienes que ser mucho más cuidadoso. No se puede decir "es esto visible". Necesitas envolver todo en un ciclo de "espera", así que diría "espera que esto sea visible". Esto es particularmente un problema cuando se ejecuta en los emuladores, porque a veces las cosas toman mucho tiempo sin ninguna buena razón. Sin los ciclos de espera, usted nunca tendrá una carrera consistente. Tenemos unos cuantos cientos de pruebas y nunca hemos tenido que usar la anotación FlakyTest.
Robotium falta un campo de texto, o el tiempo de espera, no la lectura de los medios de texto Tenemos que comprobar claramente si el texto o cualquier otro existió en la pantalla, entonces sólo es necesario realizar las acciones como
if(solo.searchText("Doesn't Exist", true){ solo.clickOnText("Doesn't Exist"); }
Similar si alguno de los componentes como botón u otros podemos lograr esto por encima de la lógica.
Agregue esto a su código:
import android.util.Log;