2010-10-22 8 views
8

Actualmente estoy construyendo una aplicación en Android y usando Robotium para realizar pruebas funcionales (por cierto, no use Robotium en nada menos que Android 1.6, es demasiado complicado).Anotaciones de prueba de Android con Robotium

Algunas de estas pruebas tienen una tendencia aleatoria a fallar, principalmente Robotium falta un campo de texto, o se agota el tiempo de espera, no lee el texto. Intento utilizar la anotación @FlakyTest, por lo que se ejecutarán dos o tres veces antes de arrojar un error de prueba fallido. Sin embargo, la anotación no funciona, las pruebas no se vuelven a ejecutar después de una falla.

Así es como yo 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 ejecutar desde la línea de comandos:

adb shell am instrumento -w com.jayway.test/android.test .InstrumentationTestRunner

Ni eclipse ni la ejecución de línea de comandos de las pruebas tiene en cuenta la anotación de prueba escamosa. ¿Alguien ve un error con la forma en que estoy tratando de aplicar @FlakyTest?

+1

es posible que desee preguntar esto en la lista de correo de robotium. –

Respuesta

3

No puedo ver ningún problema con el uso de la anotación @FlakyTest.

que arme un caso de prueba rápida 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 @FlakyTest anotación fue definitivamente siendo invocado. El (final) el fracaso de la prueba se muestra como:

junit.framework.AssertionFailedError: The text: Doesn't Exist is not found! 

Y el mensaje "Shouldn't make it here" nunca fue iniciado sesión.

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 Robotium, v2.2 de todos modos.

¿Quizás hay un problema con otra parte de su código de prueba?

+0

Debe utilizar la última versión de Robotium (5.1) – Renas

-3

Agregar a su código:

import android.util.Log; 
+0

¿Es esta respuesta incluso para la pregunta correcta? –

3

En general, al escribir pruebas para Android (con o sin Robotium), tiene que ser mucho más cuidadoso. No puedes simplemente decir "¿esto es visible?" Debe envolver todo en un ciclo de "espera", por lo que debería decir "espere a que este sea visible". Esto es particularmente un problema cuando se ejecuta en los emuladores, porque a veces las cosas toman mucho tiempo sin una buena razón. Sin los ciclos de espera, nunca tendrá una ejecución consistente. Tenemos cientos de pruebas y nunca hemos necesitado usar la anotación FlakyTest.

0

Robotium falta un campo de texto, o el tiempo de espera, significa que el texto no leer Tenemos que comprobar con claridad si el texto o cualquier existían en la pantalla a continuación, sólo tendrá que realizar las acciones como

if(solo.searchText("Doesn't Exist", true){ 
solo.clickOnText("Doesn't Exist"); 
} 

similares si cualquier componente como botón u otros podemos lograr esto por encima de la lógica.

Cuestiones relacionadas