Quando all'interno della tua app Android hai schermate che hanno funzionalità di fotocamera e/o galleria con alcune modifiche dello schermo (viste, etichette o pulsanti che appaiono/scompaiono, ecc.) e devi scrivere alcuni test Espresso per quelle funzionalità/schermate, ce ne sono un paio di aiutanti che ho utilizzato e che voglio condividere con tutti voi. Concessione delle autorizzazioni Quando si utilizza la fotocamera all'interno dell'app, è necessario concedere alcune autorizzazioni nel dispositivo per leggere/memorizzare una foto. Queste autorizzazioni vengono richieste in runtime e di solito sono correlate a READ_EXTERNAL_STORAGE e WRITE_EXTERNAL_STORAGE.
Pertanto, GrantPermissionRule consente di concedere autorizzazioni di runtime su Android M (API 23) e versioni successive e, se applicata a una classe di test, questa regola tenta di concedere tutte le autorizzazioni di runtime richieste.@get:Rulevar mRuntimePermissionRule = GrantPermissionRule.grant(android.
Manifest.permission.WRITE_EXTERNAL_STORAGE) Questa regola viene solitamente utilizzata per concedere autorizzazioni di runtime per evitare che la finestra di dialogo dei permessi venga visualizzata e blocchi l'interfaccia utente delle app e, secondo la documentazione ufficiale: secondo questa regola garantirà automaticamente READ_EXTERNAL_STORAGE quando viene richiesto WRITE_EXTERNAL_STORAGEGallery TestIl codice da prova quando si fa clic sull'icona di una galleria nell'app, quindi viene selezionata un'immagine e mostrata sullo schermo: la prima cosa qui è che ho un metodo di supporto (CameraAndGallery.
savePickedImage) che prima salva un'immagine (per brevità l'icona ic_launcher) che verrà utilizzata nel test come file locale visibile per il test: Il parametro dell'attività deriva da ActivityTestRule:@get:Rulevar mActivityTestRule = IntentsTestRule(MyActivity: :class.java) Quindi creo un oggetto ActivityResult (come un mock ma per Android Intent) che verrà utilizzato dal matcher Espresso Intents (per abbinare e convalidare gli intenti in uscita):val imgGalleryResult = CameraAndGallery.createImageGallerySetResultStub(mActivityTestRule.
attività) intenting(hasAction(Intent.ACTION_CHOOSER)).respondWith(imgGalleryResult)Il segreto qui è chiedere il file precedentemente salvato e infine utilizzato come risultato.
Nota: per lavorare con gli intenti espresso, dobbiamo aggiungere questa dipendenza alla build delle app. file gradle: AndroidTestImplementazione androidx.test.
espresso:espresso-intents:$espressoVersionPer il test che stiamo scrivendo, assumiamo che l'immagine prelevata dalla Gallery, la stiamo impostando in un ImageView che è visibile all'utente, quindi la parte finale del test è verificare che il viene visualizzata l'immagine (metodo hasImageSet()):onView(withId(R.id.auctionphotos_bigimage_viewer)).
check(matches(hasImageSet()))Camera TestSimile al Gallery Test, il test per ottenere un'immagine dal dispositivo Camera segue quasi gli stessi passaggi, ma in questo caso non è necessario salvare un'immagine prima, solo prendere in giro il risultato di la fotocamera: il risultato dell'acquisizione simulata come segue: l'immagine risultante verrà acquisita dall'intento:intending(hasAction(MediaStore. ACTION_IMAGE_CAPTURE)). answerWith(imgCaptureResult)E con ciò possiamo verificare se l'immagine è stata scattata e visualizzata:onView(withId(R.
id.auctionphotos_bigimage_viewer)).check(matches(hasImageSet())) Infine, se vuoi esplorare un po' più di contenuti relativi ai test e alle intenzioni di Espresso, potresti voler dare un'occhiata a questo repository dal team ufficiale di Android
Tecnologia Co.,Ltd di Shenzhen TigerWong
Tel:86 13717037584
E-mail: info@sztigerwong.com
Aggiungi: 1° piano, edificio A2, parco industriale digitale Silicon Valley Power, n. 22 Dafu Road, Guanlan Street, distretto di Longhua,
Shenzhen, provincia di Guangdong, Cina