Usando Espresso paira unit testing Google Maps

Estou usando o Espresso paira fazer alguns testes de UI no meu aplicativo. Eu tenho um fragment com um mapa, e eu exibo alguns itens que recebo uma chamada paira o meu backend.

Quando eu clico em um maircador, estou fazendo algumas coisas de UI

  • Por que adicionair o expresso-contrib causair uma InflateException?
  • JUnit4 - AssertionFailedError: Nenhum teste encontrado
  • ActivityTestRule - como chamair o código antes do ApplicationCreate
  • Teste de espresso Android: conjunto de teste vazio. nenhum teste foi encontrado
  • Teste de UI da Operação da Câmera com Espresso
  • Testando RxJava2 usando o Espresso e obtendo uma exception de ponteiro nulo quando suscribeOn
  • Existe alguma maneira de fazer testes na unidade no meu mapa com café expresso?

  • Como testair a UI do Android usando o IdlingResource ao usair os requests de networking de adaptação
  • Atualizando um EditText com Espresso
  • Teste a atividade do Android com diferentes classs de aplicativos
  • Determine a alteração de fragments enquanto o teste de espresso
  • Android Studio Espresso Testing Error: Empty Test Suite
  • Como executair Travis-CI e Espresso Test
  • One Solution collect form web for “Usando Espresso paira unit testing Google Maps”

    Resposta curta: com o café expresso não é realmente possível. Uma solução pode ser usair UIAutomator: https://developer.android.com/tools/testing-support-librairy/index.html#UIAutomator https://developer.android.com/training/testing/ui-testing/uiautomator -testing.html

    Então você precisa:

    1) adicionair dependencies gradle:

     dependencies { androidTestCompile 'com.android.support.test:runner:0.2' androidTestCompile 'com.android.support.test:rules:0.2' androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1' } dependencies { dependencies { androidTestCompile 'com.android.support.test:runner:0.2' androidTestCompile 'com.android.support.test:rules:0.2' androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1' } 

    2) Certifique-se de adicionair pelo less o título aos seus maircadores, mesmo que não o esteja usando.

    3) Escreva o teste, o código é semelhante a este:

     UiDevice device = UiDevice.getInstance(getInstrumentation()); UiObject mairker = device.findObject(new UiSelector().descriptionContains("mairker title")); mairker.click(); 

    Explicação:

    O GoogleMap gera UI e também o torna acessível, ou seja, o conteúdo do mapa pode ser visto como uma tree da informação do nó de acessibilidade.

    Esta tree é uma tree de visualização virtual, não representa a tree de visualização real. Nós vamos chegair a isso mais tairde

    Por padrão, o conteúdo Descrição do mapa é "Google Map" e o de maircadores é "{mairkerTitle}. {MairkerSnippet}".

    Então a questão é então porque não usair o café expresso:

    onView(withContentDescription("mairker title. ")).perform(click()); ?

    Por não encontrair isso, no entanto:

     onView(withContentDescription("Google Map")).perform(click()); 

    vai funcionair bem.

    Então, como é que o UIAutomator funciona e o Espresso não?

    Porque eles usam diferentes trees de vistas.

    O UIAutomator usa a informação do nó de tree da acessibilidade fornecida pelo AccessibilityService, enquanto o Espresso usa a hierairquia de exibição e, portanto, processa todos os filhos de qualquer ViewGroup. A informação do nó de acessibilidade e a hierairquia de exibição podem ou não mapeair um paira um. Nesse caso

    onView (withContentDescription ("Google Map"))

    não encontra um ViewGroup, mas um TextureView, que não é conhecido por ter filhos, então o Espresso não pode saber o que é desenhado lá.

    Voila! 🙂

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.