Wenn Sie Bildschirme in Ihrer Android-App haben, die Kamera- und/oder Galeriefunktionen mit einigen Bildschirmänderungen haben (Ansichten, Beschriftungen oder Schaltflächen, die erscheinen/verschwinden usw.), und Sie einige Espresso-Tests für diese Funktionen/Bildschirme schreiben müssen, gibt es ein paar von Helfern, die ich verwendet habe und die ich mit Ihnen allen teilen möchte. Erteilen von Berechtigungen Wenn Sie die Kamera in Ihrer App verwenden, müssen Sie dem Gerät einige Berechtigungen erteilen, um ein Foto lesen/speichern zu können. Diese Berechtigungen werden zur Laufzeit abgefragt und beziehen sich normalerweise auf READ_EXTERNAL_STORAGE und WRITE_EXTERNAL_STORAGE.
Daher ermöglicht die GrantPermissionRule die Erteilung von Laufzeitberechtigungen auf Android M (API 23) und höher, und wenn sie auf eine Testklasse angewendet wird, versucht diese Regel, alle angeforderten Laufzeitberechtigungen zu erteilen.@get:Rulevar mRuntimePermissionRule = GrantPermissionRule.grant(android.
Manifest.permission.WRITE_EXTERNAL_STORAGE) Diese Regel wird normalerweise verwendet, um Laufzeitberechtigungen zu erteilen, um zu verhindern, dass der Berechtigungsdialog angezeigt wird und die Apps-Benutzeroberfläche blockiert, und gemäß der offiziellen Dokumentation: Gemäß dieser Regel wird READ_EXTERNAL_STORAGE automatisch gewährt, wenn WRITE_EXTERNAL_STORAGE angefordert wirdGallery TestThe code to testen, wenn in der App auf ein Galeriesymbol geklickt wird, dann wird ein Bild ausgewählt und auf dem Bildschirm angezeigt: Das erste, was hier ist, ist, dass ich eine Hilfsmethode (CameraAndGallery.
savePickedImage), das zunächst ein Bild speichert (der Kürze halber das ic_launcher-Symbol), das im Test als lokale Datei verwendet werden soll, die für den Test sichtbar ist: Der Aktivitätsparameter stammt aus ActivityTestRule:@get:Rulevar mActivityTestRule = IntentsTestRule(MyActivity: :class.java) Dann erstelle ich ein ActivityResult-Objekt (wie ein Mock, aber für Android Intent), das vom Espresso Intents-Matcher verwendet wird (um die ausgehenden Absichten abzugleichen und zu validieren): val imgGalleryResult = CameraAndGallery.createImageGallerySetResultStub(mActivityTestRule.
activity) intentioning(hasAction(Intent.ACTION_CHOOSER)).respondWith(imgGalleryResult)Das Geheimnis hier ist, nach der zuvor gespeicherten und schließlich als Ergebnis verwendeten Datei zu fragen.
Hinweis: Um mit Espresso-Intents zu arbeiten, müssen wir diese Abhängigkeit zum App-Build hinzufügen. Gradle-Datei: androidTestImplementation androidx.test.
espresso:espresso-intents:$espressoVersionFür den Test, den wir schreiben, nehmen wir an, dass das Bild aus der Galerie ausgewählt wird, wir setzen es in eine ImageView, die für den Benutzer sichtbar ist, dann besteht der letzte Teil des Tests darin, zu überprüfen, ob die Bild wird angezeigt (Methode hasImageSet()):onView(withId(R.id.auctionphotos_bigimage_viewer)).
check(matches(hasImageSet()))Camera TestÄhnlich wie bei Gallery Test folgt der Test, um ein Bild von der Gerätekamera zu erhalten, fast den gleichen Schritten, aber in diesem Fall muss ein Bild nicht vorher gespeichert werden, sondern nur das Ergebnis verspotten die Kamera:Das verspottete Aufnahmeergebnis wie folgt:Das resultierende Bild wird von der Absicht aufgenommen:intending(hasAction(MediaStore. ACTION_IMAGE_CAPTURE)). respondWith(imgCaptureResult)Und damit können wir überprüfen, ob das Bild aufgenommen und angezeigt wurde:onView(withId(R.
id.auctionphotos_bigimage_viewer)).check(matches(hasImageSet()))Zu guter Letzt, wenn Sie ein wenig mehr Inhalt in Bezug auf Espresso-Tests und Intents erkunden möchten, sollten Sie sich dieses Repo des offiziellen Android-Teams ansehen
Shenzhen Tiger Wong Technology Co.,Ltd
Tel:86 13717037584
Email: info@sztigerwong.com
Hinzufügen: 1. Etage, Gebäude A2, Silicon Valley Power Digital Industrial Park, Nr. 22 Dafu Road, Guanlan Street, Bezirk Longhua,
Shenzhen, Provinz Guangdong, China