21
91 Testen von Android- Anwendungen 6. Juni 2013 Taentzer Software-Praktikum 2013

Testen von Android- Anwendungen - Fachbereich …swt/ss13/swPrak/files/... · Android JUnit/Robotium zum Testen von Android-Oberflächen. Taentzer Software-Praktikum 2013 93 ... Projektseite:

  • Upload
    lyhanh

  • View
    220

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Testen von Android- Anwendungen - Fachbereich …swt/ss13/swPrak/files/... · Android JUnit/Robotium zum Testen von Android-Oberflächen. Taentzer Software-Praktikum 2013 93 ... Projektseite:

91

Testen von Android-Anwendungen

6. Juni 2013

Taentzer Software-Praktikum 2013

Page 2: Testen von Android- Anwendungen - Fachbereich …swt/ss13/swPrak/files/... · Android JUnit/Robotium zum Testen von Android-Oberflächen. Taentzer Software-Praktikum 2013 93 ... Projektseite:

Taentzer Software-Praktikum 2013 92

Überblick

Entwicklung von Testfällen informelle Beschreibung der Testfälle auf Basis der

Anwendungsfallbeschreibungen Implementierung von Testfällen

Testen mit JUnit unterstützendes Framework für das Schreiben und

Ausführen von Testfällen Testen von Android-Anwendungen mit

automatisierten Testfällen JUnit als generelles Test-Framework Android JUnit/Robotium zum Testen von Android-

Oberflächen

Page 3: Testen von Android- Anwendungen - Fachbereich …swt/ss13/swPrak/files/... · Android JUnit/Robotium zum Testen von Android-Oberflächen. Taentzer Software-Praktikum 2013 93 ... Projektseite:

Taentzer Software-Praktikum 2013 93

AnwendungsfallbeschreibungEin Anwendungsfall ist eine abgeschlossene, zusammenhängende Einheit, welche einen Teil der Funktionalität des Systems repräsentiert.

Anwendungsfallbeschreibung: Beispiel Titel: Zähler anlegen Kurzbeschreibung: Es wird ein neuer Zähler in einer Gruppe

angelegt. Vorbedingungen: Die Liste der vorhandenen Zähler wird angezeigt. Beschreibung des Ablaufs: Es werden ein Name und eine

Beschreibung erzeugt sowie eine Gruppe ausgewählt. All diese Angaben sind optional. Es auch eine neue Gruppe angelegt werden.

Auswirkungen: Der Zähler ist angelegt worden. Wurde der Name, die Beschreibung oder die Gruppe nicht angegeben, werden Default-Werte verwendet.

Anmerkungen: keine

Page 4: Testen von Android- Anwendungen - Fachbereich …swt/ss13/swPrak/files/... · Android JUnit/Robotium zum Testen von Android-Oberflächen. Taentzer Software-Praktikum 2013 93 ... Projektseite:

Taentzer Software-Praktikum 2013 94

Beispiel: Repräsentative TestfälleTestfälle für den Anwendungsfall „Zähler anlegen“: Zähler ohne Eingabewerte anlegen:

Eingabe: eine nichtleere Zählerliste, Befehl zum Anlegen eines neuen Zählers

Testbedingung: Ein neuer Zähler mit Default-Werten wird in der Zählerliste angezeigt.

Zähler mit Eingabewerten wird in vorhandener Gruppe angelegt: Eingabe: nichtleere Notizenliste, Befehl zum Anlegen eines

neuen Zählers, Name, Beschreibung angeben und vorhandene Gruppe auswählen

Testbedingungen: Zähler wird in der vorhandenen Gruppe angelegt. Sein Name und seine Beschreibung werden angezeigt. Der Zähler wird in der Zählerliste angezeigt.

Page 5: Testen von Android- Anwendungen - Fachbereich …swt/ss13/swPrak/files/... · Android JUnit/Robotium zum Testen von Android-Oberflächen. Taentzer Software-Praktikum 2013 93 ... Projektseite:

Taentzer Software-Praktikum 2013 95

Beispiel: Repräsentative TestfälleTestfälle für den Anwendungsfall „Zähler anlegen“: Zähler mit Eingabewerten wird in neuer Gruppe angelegt:

Eingabe: nichtleere Notizenliste, Befehl zum Anlegen eines neuen Zählers, Name, Beschreibung angeben und neue Gruppe anlegen

Testbedingungen: Zähler wird in der neuen Gruppe angezeigt. Sein Name und seine Beschreibung werden angezeigt. Der Zähler wird in der Zählerliste angezeigt.

Das Anlegen eines Zählers wird abgebrochen: Eingabe: eine nichtleere Zählerliste, Befehl zum Anlegen

eines neuen Zählers, Eingabe eines Namen, ohne sichern wieder zurück in Zählerliste

Testbedingung: Es wird kein neuer Zähler in der Zählerliste angezeigt.

Page 6: Testen von Android- Anwendungen - Fachbereich …swt/ss13/swPrak/files/... · Android JUnit/Robotium zum Testen von Android-Oberflächen. Taentzer Software-Praktikum 2013 93 ... Projektseite:

Wie kann man testen?

per Hand: Jeden repräsentativen Testfall per Hand am Emulator oder

an einem mobilen Gerät durchführen. Test protokollieren: Ausgangssituation, Eingabewerte,

Testbedingung(en), Testergebnis(se)

automatisch: ohne GUI: mit JUnit mit GUI: mit Android JUnit /Robotium

zu testende Activity starten, Benutzereingaben simulieren, Testbedingung prüfen

Taentzer Software-Praktikum 2013 96

Page 7: Testen von Android- Anwendungen - Fachbereich …swt/ss13/swPrak/files/... · Android JUnit/Robotium zum Testen von Android-Oberflächen. Taentzer Software-Praktikum 2013 93 ... Projektseite:

Beispiel 1: Protokoll eines TestfallsBeispiel: Neuen Zähler erzeugen. Ausgangssituation: Eine nicht-leere Zähler-Liste

vorhanden. Eingaben: Button „Create Counter“, Text „Counter1“,

Text „Erster Counter“, Button „Create/Save“ Testbedingungen:

1. Liste ist um 1 länger. 2. Erst ist Activity ClickConfig, dann CreateCounter aktiv.

Testergebnisse:1. erfolgreich2. erfolgreich

Taentzer Software-Praktikum 2013 97

Page 8: Testen von Android- Anwendungen - Fachbereich …swt/ss13/swPrak/files/... · Android JUnit/Robotium zum Testen von Android-Oberflächen. Taentzer Software-Praktikum 2013 93 ... Projektseite:

Taentzer Software-Praktikum 2013 98

Grundsätzlicher Testablauf mit JUnit JUnit unterstützt automatisiertes Testen, d.h. es verlangt

während der Tests keine Benutzerinteraktion.

Jeder Test wird grundsätzlich gekapselt: Vor jedem Test werden die Werte mit setUp() initialisiert,

mit runTest() der Test durchgeführt und

mit tearDown() aufgeräumt.

In setUp() wird ein grundsätzliches Testszenario aufgebaut und mit tearDown() wieder abgebaut. Beispiele:

Öffnen und Schließen einer Datei

Initialisieren einer Datenbank

Erzeugen und Beenden graphischer Komponenten

Page 9: Testen von Android- Anwendungen - Fachbereich …swt/ss13/swPrak/files/... · Android JUnit/Robotium zum Testen von Android-Oberflächen. Taentzer Software-Praktikum 2013 93 ... Projektseite:

Taentzer Software-Praktikum 2013 99

Assert und Fail Assert = Behauptungen, die erfüllt sein müssen.

True: Wahrheit False: Falschheit Null: Wert gleich Null. NotNull: Wert nicht gleich Null. Same: Referenz stimmt überein. NotSame: Referenz stimmt nicht überein. Equals: Ruft Object.equals auf.

Beispiele: assertTrue(expected.equals(result)); assertEquals(a,b); assertEquals(“a=b“, a, b);

AssertionFailedError, wenn Test fehlschlägt. Fail = Test schlägt fehl

Page 10: Testen von Android- Anwendungen - Fachbereich …swt/ss13/swPrak/files/... · Android JUnit/Robotium zum Testen von Android-Oberflächen. Taentzer Software-Praktikum 2013 93 ... Projektseite:

Taentzer Software-Praktikum 2013 100

Fehler oder Fehler?

JUnit unterscheidet zwei Arten von Fehlern: failures: Fehler, die durch die negative Auswertung einer

zuvor gestellten Behauptung entstanden sind. errors: Fehler, die unerwartet entstanden sind, wie z.B. eine ArrayIndexOutOfBoundException

Die Klasse TestFailure dient nur zur Speicherung der Fehler im Vector.

Page 11: Testen von Android- Anwendungen - Fachbereich …swt/ss13/swPrak/files/... · Android JUnit/Robotium zum Testen von Android-Oberflächen. Taentzer Software-Praktikum 2013 93 ... Projektseite:

Android JUnit/Robotium basiert auf JUnit 3 enthält komponentenspezifische Testklassen

Tests werden in Testprojekten organisiert. Die Teststruktur sollte der Struktur des zu testenden Projekts

entsprechen. Pro Activity eine Testklasse

Testklasse als Android JUnitTest starten Robotium:

Projektseite: http://code.google.com/p/robotium/ Tutorial: http://www.vogella.com/articles/Robotium/article.html

Taentzer Software-Praktikum 2013 101

Page 12: Testen von Android- Anwendungen - Fachbereich …swt/ss13/swPrak/files/... · Android JUnit/Robotium zum Testen von Android-Oberflächen. Taentzer Software-Praktikum 2013 93 ... Projektseite:

Beispiel: AndroidJUnit Testklasse –SetUp and TearDown

Taentzer Software-Praktikum 2013 102

Start Activity

Page 13: Testen von Android- Anwendungen - Fachbereich …swt/ss13/swPrak/files/... · Android JUnit/Robotium zum Testen von Android-Oberflächen. Taentzer Software-Praktikum 2013 93 ... Projektseite:

Beispiel-Testfall: Zähler ohne Eingabewerte anlegen

Taentzer Software-Praktikum 2013 103

ClickConfigTest.java

Testbedingung: In die Liste der Zähler ist ein weiteres Element eingefügt worden.

Page 14: Testen von Android- Anwendungen - Fachbereich …swt/ss13/swPrak/files/... · Android JUnit/Robotium zum Testen von Android-Oberflächen. Taentzer Software-Praktikum 2013 93 ... Projektseite:

Beispiel-Testfall: Zähler mit Eingabewerten anlegen

Taentzer Software-Praktikum 2013 104

ClickConfigTest.java

Testbedingung: In die Liste der Zähler ist ein weiteres Element eingefügt worden.

Page 15: Testen von Android- Anwendungen - Fachbereich …swt/ss13/swPrak/files/... · Android JUnit/Robotium zum Testen von Android-Oberflächen. Taentzer Software-Praktikum 2013 93 ... Projektseite:

Beispiel-Testfall: Abbruch der Erzeugung eines neuen Zählers

Taentzer Software-Praktikum 2013 105

ClickConfigTest.java

Testbedingung: In die Liste der Zähler ist kein weiteres Element eingefügt worden.

Page 16: Testen von Android- Anwendungen - Fachbereich …swt/ss13/swPrak/files/... · Android JUnit/Robotium zum Testen von Android-Oberflächen. Taentzer Software-Praktikum 2013 93 ... Projektseite:

Durchführung der Tests

Start der definierten Testsuite:Run As AndroidJUnit Test

Oberfläche und Funktionalität wie bei JUnit

Taentzer Software-Praktikum 2013 106

Page 17: Testen von Android- Anwendungen - Fachbereich …swt/ss13/swPrak/files/... · Android JUnit/Robotium zum Testen von Android-Oberflächen. Taentzer Software-Praktikum 2013 93 ... Projektseite:

Die Solo-KlasseDie Benutzereingaben werden durch Solo simuliert.Einige mögliche Eingaben: clickInList(int line): Klick auf den

Listeneintrag in Zeile line clickOnButton(String name):

Klick auf einen Button mit Beschriftung name

clickOnEditText(int index): Klick auf einen editierbaren Text an Stelle index

enterText(int index, String text): Text text in den EditTextNummer index eingeben

Taentzer Software-Praktikum 2013 107

Edit Text Nummer 0

Edit Text Nummer 1

Page 18: Testen von Android- Anwendungen - Fachbereich …swt/ss13/swPrak/files/... · Android JUnit/Robotium zum Testen von Android-Oberflächen. Taentzer Software-Praktikum 2013 93 ... Projektseite:

Die Solo-Klasse (2)Weitere mögliche Eingaben: getCurrentActivity(): gibt die

aktuelle Activity zurück goBack(): Back-Taste drücken sendKey(int key): Taste right,

left, up, down, enter, menu,delete drücken

waitForText(String text): wartetbis der Text text gezeigt wird

Taentzer Software-Praktikum 2013 108

Solo. RIGHT

Page 19: Testen von Android- Anwendungen - Fachbereich …swt/ss13/swPrak/files/... · Android JUnit/Robotium zum Testen von Android-Oberflächen. Taentzer Software-Praktikum 2013 93 ... Projektseite:

Testbare Zusicherungen basierend auf Solo

assertCurrentActivity(String message, Class expectedClass): prüft, ob die aktuelle Activity die erwartete ist. Wenn nicht, wird message ausgegeben.

searchText(String search): sucht nach dem Text search und gibt true zurück, wenn er gefunden wurde. Falls nötig, wird gescrollt.

solo.enterText(index, „myText"); Assert.assertTrue(solo.searchText(„myText"));prüft, ob ein Text tatsächlich eingegeben worden ist

waitForText(String text, int matches, long timeout): wartet auf die Anzeige des Textes text. Der Text soll matches mal gezeigt werden. Wartezeit: timeout Millisekunden

solo.clickInList(1);assertTrue(solo.waitForText(“myText“,1,5));prüft, ob ein Text der erste Eintrag einer Liste ist

Taentzer Software-Praktikum 2013 109

Page 20: Testen von Android- Anwendungen - Fachbereich …swt/ss13/swPrak/files/... · Android JUnit/Robotium zum Testen von Android-Oberflächen. Taentzer Software-Praktikum 2013 93 ... Projektseite:

Taentzer Software-Praktikum 2013 110

Entwicklung und Tests

Wann sollte getestet werden? Möglichst gleich nach dem Kompilieren. Auf diese Weise wissen wir schnell, wo der Code

funktioniert, und wo nicht.

Wie soll man entwickeln? Ein wenig Testen, ein wenig Entwickeln. Die Anforderungen an den zu schreibenden Code sind nie

mehr so genau bewusst, wie während des Programmierens. Deshalb: Test schreiben, Code schreiben, Kompilieren und

gleich Testen. Wesentliche Testart im Praktikum: Anwendungsfall-Tests

Page 21: Testen von Android- Anwendungen - Fachbereich …swt/ss13/swPrak/files/... · Android JUnit/Robotium zum Testen von Android-Oberflächen. Taentzer Software-Praktikum 2013 93 ... Projektseite:

Taentzer Software-Praktikum 2013 111

Zusammenfassung Frühzeitige Spezifikation repräsentativer Testfälle

durch informelle Beschreibung auf der Basis von Anwendungsfällen.

Protokoll aller per Hand durchgeführten Tests Definition und Ausführung von Testfällen mit JUnit

Teststruktur: setUp, runTest, tearDown Wann ist ein Test erfolgreich? Assert und Fail

UI-Tests mit Android JUnit / Robotium Test einer Activity vorbereiten Konkrete Benutzereingaben können programmiert werden. Angezeigte Werte können überprüft werden.