Validando views por tag com a Espresso

Muitas vezes você precisa validar uma view que está dentro de um recycler view com a Espresso.

Nestes casos, normalmente você escreve um código semelhante a este:

Porém, se por acaso o recycler view renderizar duas views com o texto Nome e a id name o teste irá falhar porque a espresso não conseguiu mais encontrar somente uma view.

Nestes casos, uma estratégia a ser usada é a de colocar uma tag na view principal de cada célula e fazer o assert usando esta tag.

É importante garantir que essa tag seja única. Por exemplo se você está renderizando um objeto que está salvo no banco, pode utilizar o id do model.

Com isso, o código necessário para validar uma view que esteja dentro de uma célula com a tag 1 é o seguinte:

Explicando o código:

allOf é uma função da Espresso para poder efetuar uma validação por mais de um matcher. Você pode encadeá-lo infinitamente, por exemplo:

isDescendantOfA é uma função da Espresso para poder executar um matcher contra toda a árvore de views acima da view atual. Com isso, caso a sua view esteja dentro de um ViewGroup que está dentro da view que você colocou a tag, você não terá problemas.

withTagValue(is((Object)1L))) este código é um matcher comum da Espresso para validar que a view possui a tag 1.

Em resumo é isso, com este código você pode garantir que a Espresso vai encontrar somente uma view com o texto que você espera.

O texto foca no caso prático que levou a essa solução, porém ela também serve para diversos outros casos, como views repetidas fora do recycler view ou mesmo deixar o seu teste mais específico para garantir que ele não está passando por causa de outra view com o texto que você espera.

É isso aí, abraços e feedbacks são sempre bem vindos :)

Show your support

Clapping shows how much you appreciated Jonathan Rafael Zanella’s story.