Ich bin neu im Espresso-Test, aber es scheint keine Möglichkeit zu geben, auswechselbare Änderungen zu testen.
Ich habe ein Tutorial, bei dem es sich um eine ImageView
Drawable
Diashow handelt, die in eine halbtransparente TextView
eingefügt wurde. In meinen Tests möchte ich sicherstellen, dass beim Drücken der nächsten Schaltfläche das richtige Drawable
in das ImageView
des Lernprogramms eingefügt wurde.
Es gibt keinen Standardwert Matcher
, um nach Drawable
s zu suchen, also habe ich mich entschlossen, meinen eigenen zu schreiben, indem ich Ссылка . Da es leider keine Möglichkeit gibt, die ID eines ImageView
aktiven Drawable
abzurufen, kann ich die matchesSafely()
Implementierung nicht abschließen.
Dies kann nicht der einzige Anwendungsfall sein, um aktive Drawable
s zu testen. Was ist das Werkzeug, das Leute normalerweise für solche Situationen benutzen?
Ich bevorzuge es, Bitmaps nicht zu vergleichen und folge stattdessen dem Ratschlag dieser Antwort: Ссылка
Wenn Sie die Zeichenfunktion der Bildansicht festlegen, speichern Sie auch die ausklappbare ID in ihrem Tag mit setTag(R.drawable.your_drawable)
. Verwenden Sie dann die withTag(equalTo(R.drawable.your_drawable))
-Matcher von Espresso, um nach dem richtigen Tag zu suchen.
Bitte überprüfe dieses Tutorial, das ich gefunden habe. Scheint ziemlich gut zu funktionieren Ссылка
Hier ist die Zusammenfassung für Copy Pasta; -)
%Vor% Bitte beachten Sie, dass dies nur funktioniert, wenn Ihr Drawable
ein BitmapDrawable
ist. Wenn Sie auch VectorDrawable
oder andere Drawable
haben, müssen Sie dies überprüfen ( imageView.getDrawable() instanceOf XXXDrawable
) und die Bitmap daraus entfernen. Außer Sie haben eine Art einfaches Drawable, wo Sie nur eine Farbe haben oder so können Sie vergleichen.
Um die Bitmap eines VectorDrawable zum Beispiel zu bekommen, müssen Sie das VectorDrawable auf ein Canvas zeichnen und es in ein Bitmap speichern (ich hatte Probleme, wenn das VectorDrawable getönt war). Wenn Sie eine StateListDrawable haben, können Sie die Drawable des ausgewählten Status abrufen und Ihre if instanceOf-Kaskade wiederholen. Für andere Drawable-Typen habe ich noch keine Erfahrung, sorry!
Es gibt einen Kern, der withBackground()
, withCompoundDrawable()
, withImageDrawable()
Matcher von Frankie Sardo enthält. Alle Kredite an ihn.
Und bezüglich Bild-IDs - Sie können R.drawable.image_name
eingeben, dann wird die ID des Zeichenobjekts automatisch abgerufen.
Ich akzeptiere die Antwort von @wolle als gültig, aber ich möchte zugeben, dass es selbst für Java sogar einfacher sein könnte. Sie kann in ein static function
(oder ein companion
in Kotlin) konvertiert werden und auch einen veralteten Code bereinigen.
Wie auch immer, die Code-kompaktierte-nicht-veraltete Lösung für Kotlin wäre dies:
%Vor%22 Zeilen vs 44, wie?
Ich habe bereits auf das ähnliche Thema hier geantwortet: Erhalte die ID eines Zeichens in ImageView .
Der Ansatz basiert auf dem Taggen einer Ansicht mit einer angegebenen Ressourcen-ID in der benutzerdefinierten LayoutInflater
. Der gesamte Prozess wird durch eine einfache TagView Bibliothek automatisiert. Es ist besonders praktisch für den Espresso-Test, da Sie nicht jede Ansicht in Ihrem Projekt manuell markieren müssen. In der Tat müssen Sie nichts ändern, außer dass Sie einige Zeichen in Runtime gesetzt haben. In diesem Fall müssen Sie sich den Abschnitt Tagging in Runtime ansehen.
Als Ergebnis können Sie zwei Zeichnungsobjekte nur anhand ihrer IDs vergleichen:
%Vor% Benutzerdefinierte Espresso-Assertion assertTagKeyValue
ist verfügbar hier
Tags und Links android android-espresso