2010-10-22 16 views
8

Attualmente sto costruendo un'applicazione in Android e utilizzo di Robotium per eseguire test funzionali (a proposito, non utilizzare Robotium su qualcosa di meno che Android 1.6, è troppo buggy).Annotazioni di test Android con Robotium

Alcuni di questi test hanno una tendenza casuale a fallire, principalmente Robotium manca un campo di testo, o cronometra, non legge il testo. Sto tentando di utilizzare l'annotazione @FlakyTest, quindi verranno eseguiti due o tre volte prima di lanciare un errore di test non riuscito. Tuttavia, l'annotazione non funziona, i test non vengono rieseguiti dopo un errore.

Ecco come sto usando l'annotazione:

public class ClassName extends ActivityInstrumentationTestCase2<HomeActivity>{ 

     @LargeTest 
     @FlakyTest(tolerance=3) 
     public void testMethod(){ 

     //Here I run my roboitium scripts. 

     } 
} 

Poi ho eseguito dalla riga di comando:

adb shell strumento am w com.jayway.test/android.test .InstrumentationTestRunner

Né eclipse né l'esecuzione della riga di comando dei test prende in considerazione l'annotazione del test a fiocchi. Qualcuno vede un errore con come sto cercando di applicare @FlakyTest?

+1

si potrebbe desiderare di chiedere questo sulla mailing list robotium .. –

risposta

3

Non riesco a vedere alcun problema con l'utilizzo dell'annotazione @FlakyTest.

ho messo insieme un banco di prova per testare rapido @FlakyTest e 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 ha mostrato i seguenti messaggi:

Execution Count: 1 
Execution Count: 2 
Execution Count: 3 

Così l'annotazione @FlakyTest è stato sicuramente essendo invocato. L'(finale) fallimento del test è stato mostrato come:

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

E il messaggio "Shouldn't make it here" non è mai stato registrato.

Quindi, per quanto posso vedere, non c'è alcun problema con il modo in cui hai dichiarato la tua annotazione o qualsiasi problema con @FlakyTest e Robotium, v2.2 comunque.

Forse c'è un problema con un'altra parte del codice di prova?

+0

Si dovrebbe usare l'ultima versione di Robotium (5.1) – Renas

-3

aggiungere questo al vostro codice:

import android.util.Log; 
+0

Questa risposta è anche per la domanda giusta ?? –

3

In generale, quando si scrivono i test per Android (con o senza Robotium) bisogna essere molto più attenti. Non puoi semplicemente dire "è visibile". È necessario avvolgere tutto in un ciclo di "attesa", quindi dire "attendere che questo sia visibile". Questo è particolarmente un problema quando si esegue negli emulatori, perché a volte le cose richiedono molto tempo senza una buona ragione. Senza i cicli di attesa, non avrai mai una corsa coerente. Abbiamo alcune centinaia di test e non abbiamo mai avuto bisogno di usare l'annotazione FlakyTest.

0

Robotium manca un campo di testo, o timeout, il testo non leggere significa Dobbiamo controllare in modo chiaro se il testo o qualsiasi esistevano sullo schermo allora solo bisogno di eseguire le azioni come

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

simile se qualsiasi componente come il pulsante o altri possiamo raggiungere questo con la logica di cui sopra.

Problemi correlati