Verwenden von Espresso zum Testen von ausformbaren Änderungen

9

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?

    
nukeforum 17.11.2015, 17:34
quelle

6 Antworten

5

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.

    
Fabian Streitel 14.06.2017, 07:45
quelle
9

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!

    
wolle 05.02.2016 11:25
quelle
2

Basierend auf der Hilfe von @wolle und @ FreewheelNat, um (Vector) Drawable zu vergleichen:

%Vor%     
drakeet 03.06.2017 11:41
quelle
1

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.

    
denys 07.02.2016 20:42
quelle
0

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?

    
Rafael Ruiz 01.02.2018 15:26
quelle
0

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

    
Bogdan Kornev 21.03.2018 13:27
quelle

Tags und Links