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.

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 ?

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; 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.