Mit Espresso zu testen drawable änderungen
Ich bin neu in der Espresso-Test, aber es scheint nicht, wie es irgendeine Möglichkeit zu testen, drawable änderungen.
Ich habe ein tutorial, das ist eine ImageView
Drawable
slideshow "versteckt in" eine semi-transparente TextView
. In meinen tests, die ich will, um sicherzustellen, dass, wenn die nächste Taste gedrückt wird, die richtige Drawable
eingefügt wurde in das tutorial ImageView
.
Es ist kein Standard - Matcher
zu prüfen Drawable
s, so habe ich mich zum schreiben meiner eigenen mit https://stackoverflow.com/a/28785178/981242. Leider, da es keine Möglichkeit zum abrufen der id eines ImageView
's active Drawable
ist, kann ich nicht matchesSafely()
Umsetzung.
Kann dies nicht der einzige Anwendungsfall für die Erprobung aktiver Drawable
s. Was ist das Werkzeug, dass die Menschen in der Regel verwenden Sie für Situationen wie diese?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich lieber nicht zu vergleichen bitmaps und stattdessen Folgen diese Antwort Tipp: https://stackoverflow.com/a/14474954/1396068
Beim einstellen der Bild-Ansicht drawable, auch zu speichern, drawable ID-tag mit
setTag(R.drawable.your_drawable)
. Dann verwenden Sie Espresso istwithTagValue(equalTo(R.drawable.your_drawable))
Matcher, um zu überprüfen, ob die richtige tag.withTagValue(CoreMatchers.<Object>equalTo(R.drawable.your_drawable))));
. Danke. 🙂überprüfen Sie bitte dieses tutorial habe ich gefunden.
Scheint zu funktionieren ziemlich gut https://medium.com/@dbottillo/android-ui-test-espresso-matcher-for-imageview-1a28c832626f#.4snjg8frw
Hier ist die Zusammenfassung für copy-pasta 😉
Bitte beachten Sie, dass dies nur funktioniert, wenn Ihr
Drawable
ist einBitmapDrawable
. Wenn Sie auchVectorDrawable
oder andereDrawable
Sie haben zu prüfen, ob diese (imageView.getDrawable() instanceOf XXXDrawable
) und nutzen Sie die bitmap aus ihm heraus. Außer Sie haben irgendeine Art von einfachen Drawable, wo Sie müssen nur eine Farbe oder so, die Sie vergleichen können.Zum abrufen der Bitmap für ein VectorDrawable zum Beispiel, Sie haben zu ziehen, die VectorDrawable auf eine Leinwand, und speichern Sie es als bitmap (ich hatte einige Probleme, wenn die VectorDrawable wurde getönt).
Wenn Sie eine StateListDrawable Sie können das Drawable des ausgewählten Status und wiederholen Sie die if-instanceOf-Kaskade.
Für andere Drawable Arten habe ich keine Erfahrung, sorry!
Drawable
ist nichtBitmapDrawable
werden kannGradientDrawable
,ColorDrawable
oderShapeDrawable
und viele andereEs ist eine Kernaussage enthält
withBackground()
,withCompoundDrawable()
,withImageDrawable()
Matcher von Frankie Sardo. Alle Kredite an ihn.Und über die Bild-ids - Sie können geben Sie
R.drawable.image_name
, dann die id des drawable automatisch abgerufen.Basierend auf @wolle und @FreewheelNat Hilfe für den Vergleich von (Vektor -) Drawable:
Akzeptiere ich die Antwort von @wolle als gültig, aber ich möchte gestehen, dass auch für Java, es könnte sogar sein, einfacher als das. Es kann umgewandelt werden in eine
static function
(oder eincompanion
in Kotlin) und reinigen auch einige veraltet code.Sowieso die code-verdichtet-nicht veraltet-Lösung für Kotlin wäre diese:
22 Zeilen vs 44, eh?
Ich bereits beantwortet ähnlichen Thema hier: Holen Sie sich die ID eines drawable in der Bildansicht.
Der Ansatz basiert auf tagging eine Ansicht, die die angegebene Ressourcen-id in der benutzerdefinierten
LayoutInflater
. Ganze Prozess ist automatisiert, die durch eine einfache Bibliothek TagView. Es ist besonders praktisch für Espresso-test, weil Sie nicht brauchen, um jeden tag-Ansicht in Ihrem Projekt manuell. In der Tat, Sie brauchen nicht, etwas zu ändern, außer Sie setzen einige drawables in der runtime. In diesem Fall müssen Sie sich in Tagging in runtime Abschnitt.Als Ergebnis, können Sie vergleichen zwei drawables nur durch Ihre ids:
Benutzerdefinierte Espresso Behauptung
assertTagKeyValue
verfügbar ist hier