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 :)