Quando você tem telas em seu aplicativo Android com recursos de câmera e/ou galeria com algumas alterações de tela (visualizações, rótulos ou botões que aparecem/desaparecem, etc.) de ajudantes que tenho usado e quero compartilhar com todos vocês. Conceder permissõesQuando você está usando a Câmera em seu aplicativo, você precisa conceder algumas permissões no dispositivo para ler/armazenar uma foto. Essas permissões são solicitadas em tempo de execução e geralmente estão relacionadas a READ_EXTERNAL_STORAGE e WRITE_EXTERNAL_STORAGE.
Assim, a GrantPermissionRule permite a concessão de permissões de tempo de execução no Android M (API 23) e superior e, quando aplicada a uma classe de teste, esta regra tenta conceder todas as permissões de tempo de execução solicitadas.@get:Rulevar mRuntimePermissionRule = GrantPermissionRule.grant(android.
Manifest.permission.WRITE_EXTERNAL_STORAGE) Esta regra geralmente é usada para conceder permissões de tempo de execução para evitar que a caixa de diálogo de permissão apareça e bloqueie a interface do aplicativo, e de acordo com a documentação oficial: De acordo com esta regra, concederá automaticamente READ_EXTERNAL_STORAGE quando WRITE_EXTERNAL_STORAGE for solicitadoGallery TestThe code to teste quando um ícone de galeria é clicado no aplicativo, então uma imagem é escolhida e mostrada na tela: A primeira coisa aqui é que eu tenho um método auxiliar (CameraAndGallery.
savePickedImage) que primeiro salva uma imagem (para resumir o ícone ic_launcher) que será usada no teste como um arquivo local visível para o teste: O parâmetro activity vem da ActivityTestRule:@get:Rulevar mActivityTestRule = IntentsTestRule(MyActivity: :class.java)Então eu crio um objeto ActivityResult (como um mock, mas para Android Intent) que será usado pelo matcher Espresso Intents (para corresponder e validar os intents de saída):val imgGalleryResult = CameraAndGallery.createImageGallerySetResultStub(mActivityTestRule.
activity) intenting(hasAction(Intent.ACTION_CHOOSER)).respondWith(imgGalleryResult)O segredo aqui é pedir o arquivo previamente salvo e finalmente usado como resultado.
Observação: para trabalhar com intenções de café expresso, devemos adicionar essa dependência ao build de aplicativos. arquivo gradle: androidTestImplementação androidx.test.
espresso:espresso-intents:$espressoVersionPara o teste que estamos escrevendo, vamos supor que a imagem escolhida da Galeria, estamos configurando-a em um ImageView que é visível para o usuário, então a parte final do teste é verificar se o imagem é exibida (método hasImageSet()):onView(withId(R.id.auctionphotos_bigimage_viewer)).
check(matches(hasImageSet()))Camera TestSimilar ao Gallery Test, o teste para obter uma imagem do dispositivo Camera segue quase os mesmos passos, mas neste caso uma imagem não precisa ser salva antes, apenas simula o resultado de the camera:O resultado da captura simulada da seguinte forma:A imagem resultante será tirada pela intent:intending(hasAction(MediaStore. ACTION_IMAGE_CAPTURE)). respondWith(imgCaptureResult)E com isso podemos verificar se a imagem foi tirada e exibida:onView(withId(R.
id.auctionphotos_bigimage_viewer)).check(matches(hasImageSet()))Finalmente, se você quiser explorar um pouco mais de conteúdo sobre testes e intenções do Espresso, dê uma olhada neste repositório da equipe oficial do Android
Tecnologia Co. de Shenzhen TigerWong, Ltd
Tel:86 13717037584
O email: info@sztigerwong.com
Adicionar: 1º Andar, Edifício A2, Silicon Valley Power Digital Industrial Park, No. Estrada Dafu 22, Rua Guanlan, Distrito de Longhua,
Shenzhen, província de Guangdong, China