Google Espresso o Robotium [chiuso]


116

Devo usare lo strumento di test automatizzato dell'interfaccia utente e sono confuso tra l'utilizzo di Robotium e Google Espresso.

Quali sono le principali differenze tra i due? Ci sono caratteristiche che esistono in uno ma non nell'altro?


20
Onestamente odio quando le persone votano negativamente senza scrivere alcun commento. Apprezzerei se la persona che vota negativamente scrivesse alcuni commenti sul motivo per cui lo sta facendo
Androidme

9
Penso che la domanda sia molto utile. Molti sviluppatori lo chiedono a se stessi. Quali sono le differenze? Penso che il problema sia il modo in cui lo chiedi. Dovresti chiederlo in modo più dettagliato e non solo chiedere quale usare.
tasomaniac

8
Questa è la domanda esatta a cui volevo rispondere. Grazie per la pubblicazione
Richard Fung

8
Non mi piace il fatto che questo sia fuori tema secondo StackOverflow. So che se dovessimo confrontare ogni singola libreria e strumento ci potrebbero essere molte risposte basate sull'opinione, ma una domanda come questa che chiede le differenze tra due risorse è molto utile.
David Argyle Thacker

Risposte:


176

Divulgazione completa: sono uno degli autori di Espresso.

Sia Espresso che Robotium sono framework basati sulla strumentazione, il che significa che utilizzano Android Instrumentation per ispezionare e interagire con le attività sotto test.

In Google, abbiamo iniziato utilizzando Robotium perché era più conveniente della strumentazione di serie (tanto di cappello agli sviluppatori Robotium per averlo reso così). Tuttavia, non ha soddisfatto la nostra esigenza di un framework che rendesse facile la scrittura di test affidabili per gli sviluppatori.

I principali progressi di Espresso rispetto a Robotium:

  1. Sincronizzazione. Per impostazione predefinita, la logica del test di strumentazione viene eseguita su un thread (strumentazione) diverso rispetto alle operazioni dell'interfaccia utente (elaborate sul thread dell'interfaccia utente). Senza la sincronizzazione delle operazioni di test con gli aggiornamenti dell'interfaccia utente, i test saranno soggetti a instabilità, ovvero falliranno casualmente a causa di problemi di temporizzazione. La maggior parte degli autori di test ignora questo fatto, alcuni aggiungono meccanismi di sospensione / ripetizione e ancora meno implementano un codice di thread safety più sofisticato. Nessuno di questi è l'ideale. Espresso si prende cura della sicurezza dei thread sincronizzando perfettamente le azioni e le asserzioni di test con l'interfaccia utente dell'applicazione sottoposta a test. Robotium tenta di risolvere questo problema con meccanismi di sospensione / ripetizione, che non solo sono inaffidabili, ma fanno anche sì che i test vengano eseguiti più lentamente del necessario.

  2. API. Espresso ha un'API piccola, ben definita e prevedibile, aperta alla personalizzazione. Si dice al framework come individuare un elemento dell'interfaccia utente utilizzando gli abbinamenti hamcrest standard e quindi gli si chiede di eseguire un'azione o di controllare un'asserzione sull'elemento di destinazione. Puoi contrastarlo con l'API di Robotium, in cui l'autore del test dovrebbe scegliere tra oltre 30 metodi di clic. Inoltre, Robotium espone metodi pericolosi come getCurrentActivity (cosa significa comunque current?) E getView, che consentono di operare su oggetti al di fuori del thread principale (vedere il punto sopra).

  3. Informazioni chiare sull'errore. Espresso si impegna a fornire ricche informazioni di debug quando si verifica un errore. Inoltre, puoi personalizzare il modo in cui i guasti vengono gestiti da Espresso con il tuo gestore dei guasti. Non l'ho provato per un po ', ma le versioni precedenti di Robotium soffrivano di una gestione degli errori incoerente (ad esempio, il metodo clickOnView avrebbe ingoiato SecurityExceptions).

Contrariamente a una risposta precedente, Espresso è supportato su tutte le versioni API con un numero significativo di utenti (vedi: http://developer.android.com/about/dashboards/index.html ). Funziona su alcune delle versioni precedenti, ma testarle sarebbe uno spreco di risorse. A proposito di test ... Espresso viene testato su ogni modifica da una suite di test completa (con oltre il 95% di copertura) e dalla maggior parte delle applicazioni Android sviluppate da Google.


Ciao ! Grazie per la risposta, Espresso offre la possibilità di testare più applicazioni nello stesso caso di prova? Devo testare la mia applicazione che chiama un'attività da un'altra applicazione (l'altra mia app che condivide lo stesso sharedUserId) e quindi recupera il risultato. Non posso farlo con Robotium, ma forse con Espresso? :-)
nbe_42

1
No, non puoi interagire con l'interfaccia utente al di fuori del tuo processo con Espresso. Questa è una limitazione del framework della strumentazione.
ValeraZakharov

1
@ValeraZakharov :: Hii ... !! Come hai detto, espresso si prenderà cura della sincronizzazione dei thread dell'interfaccia utente e non è necessario inserire Sleep. Ma nel mio caso, ho scritto pochi casi di test e tutti i casi di test funzionano nella mia macchina locale (con una sospensione per TestSuite come inizio). Ma quasi il 99% dei casi di test fallisce quando corro con jenkins locale / server. Ho disabilitato tutte le animazioni nell'emulatore di jenkins. La maggior parte delle volte ricevo AppNotIdleException. Non riesco a capire la causa principale. Puoi aiutarmi per favore.
Naresh Gunda

@Radu L'ho fatto. Il tuo commento è nullo e senza una spiegazione adeguata sembra un tentativo avventato di attirare l'attenzione.
Rakib

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.