Espresso — Como criar uma ViewAction customizada para um RatingBar
No desenvolvimento de aplicações Android, uma parte bastante importante são os testes automatizados de UI utilizando a biblioteca Espresso, muitas pessoas negligênciam codificar testes e outras por não terem conhecimento suficiente sobre o poder dessa biblioteca acabam não usando. Nesta semana, no slack do AndroidDevBR, uma pessoa surgiu com uma dúvida que a resolução era bem simples, entretanto, pode ser a dúvida de outras pessoas também, dessa forma, vim aqui compartilhar a resolução.
Para a aplicação de teste, fizemos um fluxo bem simples com um FloatingActionButton, que abre uma caixa de diálogo, que contém um texto, um RatingBar e um botão, simulando o envio da avaliação para um servidor, como vocês podem ver abaixo.
Então para iniciarmos a testar a nossa aplicação, o primeiro passo é configurarmos as dependências de testes da nossa aplicação no build.gradle da aplicação.
Uma ViewAction é responsável por realizar uma interação no elemento View fornecido, ou seja, ela irá executar uma ação na View fornecida. Como o RatingBar não têm nenhuma ViewAction pré-definida, precisamos criar o nosso ViewAction customizado, para isso, precisamos criar uma classe que estende de ViewAction e implementa três método, são eles:
1. getConstraints — Um mecanismo para especificar em que tipo de View a ViewAction customizada pode executar a ação definida no método perform.
2. getDescription — Descrição sobre a ViewAction Customizada.
3. perform — A ação que será executada na View.
Por fim, podemos criar a nossa classe de teste, onde vamos seguir os seguintes steps:
1. Ao abrir a tela, clicar no FloatingActionButton;
2. Verificar se o RatingBar está sendo mostrado na caixa de diálogo;
3. Clicar no RatingBar colocando a nota como 4 estrelas;
4. Verificar que ao alterar o valor do RatingBar, uma variável na nossa MainActivity também teve o valor alterado;
5. Verificar que ao clicar no botão Enviar, a caixa de diálogo não existe mais na MainActivity.
Com isso, temos o nosso RatingBar fazendo a ação que programamos de forma satisfatória, entretanto estamos criando uma instância dele no nosso terceiro passo, que está fora do padrão dos outros ViewActions.
onView(withId(R.id.rank_dialog_rating_bar)).perform(RatingBarViewAction(4.0F))
Para termos o mesmo padrão, podemos criar um objeto para encapsular essa lógica.
E assim poder chamar a nossa ViewAction conforme o padrão de escrita de testes com Espresso.
onView(withId(R.id.rank_dialog_rating_bar)).perform(setRating(4.0F))
Com isso finalizamos a nossa implementacão e temos o nosso ViewAction customizado.
~Se você gostou deste artigo, clique no 👏 abaixo para que mais pessoas possam vê-lo. Também você pode me seguir no Medium, e ai vai poder receber atualizações sobre o meu próximo artigo!