Upload
lyhanh
View
220
Download
0
Embed Size (px)
Citation preview
91
Testen von Android-Anwendungen
6. Juni 2013
Taentzer Software-Praktikum 2013
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
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
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.
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.
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
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
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
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
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.
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
Beispiel: AndroidJUnit Testklasse –SetUp and TearDown
Taentzer Software-Praktikum 2013 102
Start Activity
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.
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.
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.
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
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
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
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
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
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.