Google Espresso ou Robotium [fechado]

115

Eu tenho que usar a ferramenta de teste de IU automatizada e estou confuso entre usar Robotium e Google Espresso.

Quais são as principais diferenças entre os dois? Existem recursos em um, mas não no outro?

Androidme
fonte
19
Sinceramente, odeio quando as pessoas votam negativamente sem escrever nenhum comentário. Eu agradeceria se a pessoa que está votando contra mim escrevesse alguns comentários sobre por que ele / ela está fazendo isso
Androidme
8
Acho que a pergunta é muito útil. Muitos desenvolvedores estão se perguntando isso. Quais são as diferenças? Acho que o problema é a maneira como você está perguntando. Você deve perguntar com mais detalhes e não apenas perguntar qual usar.
tasomaníaco
8
Esta é a pergunta exata que eu queria respondida. Obrigado por postar
Richard Fung
8
Eu não gosto do fato de que isso está fora do assunto de acordo com StackOverflow. Eu sei que se tivéssemos que comparar cada biblioteca e ferramenta, poderia haver muitas respostas baseadas em opinião, mas uma pergunta como esta que pede as diferenças entre dois recursos é muito útil.
David Argyle Thacker,

Respostas:

175

Divulgação total: Sou um dos autores do Espresso.

Tanto o Espresso quanto o Robotium são estruturas baseadas em instrumentação, o que significa que usam a Instrumentação Android para inspecionar e interagir com as atividades em teste.

No Google, começamos usando o Robotium porque era mais conveniente do que a instrumentação de estoque (tiro o chapéu aos desenvolvedores do Robotium por fazer isso). No entanto, isso não satisfez nossa necessidade de uma estrutura que tornasse a escrita de testes confiáveis fácil para os desenvolvedores.

Os principais avanços do Espresso em relação ao Robotium:

  1. Sincronização. Por padrão, a lógica de teste de instrumentação é executada em um encadeamento (instrumentação) diferente das operações de IU (processadas no encadeamento de IU). Sem a sincronização das operações de teste com as atualizações da IU, os testes ficarão sujeitos a falhas - ou seja, falharão aleatoriamente devido a problemas de tempo. A maioria dos autores de teste ignora esse fato, alguns adicionam mecanismos de suspensão / repetição e menos ainda implementam um código de segurança de thread mais sofisticado. Nenhum deles é ideal. O Espresso cuida da segurança do thread, sincronizando perfeitamente as ações e asserções de teste com a IU do aplicativo em teste. Robotium tenta resolver isso com mecanismos de suspensão / nova tentativa, que não são apenas não confiáveis, mas também fazem com que os testes sejam executados mais lentamente do que o necessário.

  2. API. O Espresso possui uma API pequena, bem definida e previsível, que pode ser customizada. Você diz ao framework como localizar um elemento de IU usando matchers hamcrest padrão e, em seguida, instrui-o a executar uma ação ou verificar uma asserção no elemento de destino. Você pode comparar isso com a API do Robotium, onde o autor do teste deve escolher entre mais de 30 métodos de clique. Além disso, Robotium expõe métodos perigosos como getCurrentActivity (o que significa current, afinal?) E getView, que permitem operar em objetos fora do thread principal (consulte o ponto acima).

  3. Informações claras sobre a falha. O Espresso se esforça para fornecer informações valiosas de depuração quando ocorre uma falha. Além disso, você pode personalizar a maneira como as falhas são tratadas pelo Espresso com seu próprio gerenciador de falhas. Eu não tentei fazer isso por um tempo, mas as versões anteriores do Robotium sofriam de falha inconsistente no manuseio (por exemplo, o método clickOnView engolia SecurityExceptions).

Ao contrário da resposta anterior, o Espresso é compatível com todas as versões da API com um número significativo de usuários (consulte: http://developer.android.com/about/dashboards/index.html ). Funciona em algumas das versões mais antigas, mas testá-las seria um desperdício de recursos. Falando em testes ... O Espresso é testado em todas as alterações por um conjunto de testes abrangente (com mais de 95% de cobertura), bem como a maioria dos aplicativos Android desenvolvidos pelo Google.

ValeraZakharov
fonte
Oi ! Obrigado pela sua resposta, o Espresso oferece a possibilidade de testar vários aplicativos no mesmo caso de teste? Tenho que testar meu aplicativo que chama uma atividade de outro aplicativo (meu outro aplicativo que compartilha o mesmo sharedUserId) e, em seguida, recupera o resultado. Não posso fazer isso com Robotium, mas talvez com Espresso? :-)
nbe_42
1
Não - você não pode interagir com a IU fora do seu processo com o Espresso. Esta é uma limitação da estrutura de instrumentação.
ValeraZakharov
1
@ValeraZakharov :: Hii ... !! Como você disse, o espresso cuidará da sincronização de threads de interface do usuário e não há necessidade de colocar a suspensão. Mas, no meu caso, escrevi alguns casos de teste e todos os casos de teste estão funcionando em minha máquina local (com um sono por TestSuite como o início). Mas quase 99% dos casos de teste estão falhando quando executo o jenkins local / servidor. Desativei todas as animações no emulador jenkins. Na maioria das vezes, recebo AppNotIdleException. Não consigo descobrir a causa raiz. Você pode me ajudar.
Naresh Gunda
@Radu conseguiu. Seu comentário é nulo e sem explicação adequada parece uma tentativa temerária de chamar a atenção.
Rakib
9

O Espresso é muito mais rápido que o Robotium, mas só funciona em algumas versões do SDK.

Portanto, se você deseja um teste que funcione em todos os dispositivos, escolha o Roboitum. Caso contrário, opte pelo expresso e não se esqueça que ainda será um testador beta por um bom tempo.

Snicolas
fonte
Uma
votação positiva
2
Link acima alterado, este é o novo: google.github.io/android-testing-support-library/docs/espresso/…
Evin1_