Hello World
Einleitung
In diesem Tutorial geht es um die Erstellung eines typischen "Hello World"-Programms für die Android-Plattform. Dabei wird auf die Erstellung eines einfachen Projektgrundgerüstes und eines zugehörigen Testprojekts eingegangen. Die Anforderungen an das Beispielprojekt bestehen darin, dass der auf dem Bildschirm anzuzeigende Text aus einer externen Datei geladen wird. Das Testprojekt muss sicherstellen, dass der entsprechende Text in der Ressourcendatei vorhanden ist und korrekt angezeigt wird.
Erstellung eines neuen Projekts
Der erste Schritt besteht in der Erstellung eines neuen Projekts. Dazu wird in Eclipse über das File-Menu der Punkt New und anschließend Other ausgewählt. Im daraufhin erscheinenden Fenster findet wählt man Android => Android Project. Mit einem Klick auf Next gelangt man zur nächsten Seite. Hier muss ein Projektname angegeben werden.
Im nächsten Schritt muss die Zielplattform angegeben werden. Es werden nur installierte SDK Versionen angezeigt. Es ist darauf zu achten, dass sie die für das Endgerät benötigte Version auswählen.
Der letzte Schritt besteht aus der Angabe einiger Informationen zum Projekt. Es muss der Name der Anwendung und das Java-Package angegeben werden. Die Einstellung Create Activity wird ausgewählt. Außerdem wird ein Haken bei Create a Test Project gesetzt. Nach einem Klick auf Finish wird das Projekt erzeugt.
Wichtig: In den folgenden Tutorials wird häufig nur beschrieben, dass ein neues Projekt angelegt werden soll. Dies geschieht genauso wie eben beschrieben. Lediglich der Name der Anwendung sowie der zu erstellenden Activity müssen geändert werden.
Das Projekt kann nun mit Run => Run As => Android Application gestartet werden. Wenn das Endgerät zu diesem Zeitpunkt angeschlossen ist, so wird die Anwendung direkt auf das Gerät kopiert und gestartet. Sollte keine Gerät angeschlossen sein, so wird folgende Meldung gezeigt:
Klicken Sie auf No und stellen Sie sicher, dass ihr Endgerät angeschlossen ist. Wahlweise kann auch nach einem Klick auf Yes ein virtuelles Gerät erstellt werden, welches einen Emulator startet.
Auslagerung von Zeichenketten
Der Eclipse Project Wizard erstellt automatisch die Datei res/values/strings.xml. In dieser befinden sich bereits die auszulagernden Zeichenketten. In der Datei res/layout/main.xml kann der Zugriff auf die Zeichenketten innerhalb der Anwendung betrachtet werden. Will man auf einen nichtvorhandenen String zugreifen, so wird bereits durch die IDE ein Fehler angezeigt:
Auch der programmatische Zugriff auf nichtvorhandene Ressourcen führt zu einem Fehler.
Testen
Der Test, welcher im folgenden Abschnitt erstellt wird, soll zwei Dinge sicherstellen. Zum Ersten wird getestet, ob die Anwendung korrekt gestartet wird und zum Zweiten, dass der auf dem Bildschirm angezeigte Text der selbe ist, wie in der Ressourcendatei angegeben.
Vorbereitung
Um auf ein Element der Benutzeroberfläche zugreifen zu können, muss
dieses eine eindeutige ID besitzen. In der Datei res/layout/main.xml
wird diese dem
TextView
-Element mit einem Attribut zugeordnet:
android:id="@+id/textview"
. In dem Attribut bedeutet
@+id
, dass der Teil nach dem
/
vom XML-Parser verarbeitet werden soll und das es sich um eine ID
handelt. Zusätzlich wird die ID als neu behandelt (durch das
+
gekennzeichnet) und in die Liste der Ressourcen eingetragen. Der
Quelltext der Datei res/layout/main.xml
sollte nun etwa wie folgt aussehen:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <TextView android:id="@+id/textview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout>
Erstellung der Testklasse
Um eine neue Testklasse zu erstellen, wird per Rechtsklick auf das
Testpackage das Menu New => Class aufgerufen.
Als Name geben wir "HelloWorldTest" ein. Als Superklasse wird
ActivityInstrumentationTestCase2<HelloWorldActivity>
angegeben. Eine
import
-Anweisung für die zu testenden Activity wird hierbei nicht
automatisch erstellt und muss somit per Hand eingegeben werden. Auch
ein Konstruktor muss explizit definiert werden. Der gesamte Quelltext
der Testklasse sollte nun wie folgt aussehen:
package de.hszigr.mobileapps.helloworld.test; import de.hszigr.mobileapps.helloworld.HelloWorldActivity; import android.test.ActivityInstrumentationTestCase2; public class HelloWorldTest extends ActivityInstrumentationTestCase2<HelloWorldActivity> { public HelloWorldTest() { super(HelloWorldActivity.class); } }
Die setUp()-Methode
Der nächste Schritt besteht in der Implementation der von JUnit
bekannten Methode setUp(). In dieser wird die Activity gestartet und
das
TextView
-Element gespeichert, welches den auszugebenden Text enthält.
Außerdem speichern wir den erwarteten Text aus der Ressourcendatei in
einem Feld ab. Um eine Referenz auf das
TextView
-Element zu erhalten, wird die Methode
findViewById()
der Activity-Klasse aufgerufen. Der Rückgabewert muss dann aber noch
in ein Objekt vom Typ
TextView
gecastet werden.
@Override protected void setUp() throws Exception { super.setUp(); activity = getActivity(); textView = (TextView) activity.findViewById(de.hszigr.mobileapps.R.id.textview); expectedString = activity.getString(de.hszigr.mobileapps.R.string.hello); }
Vorbedingungen testen
Als nächstes wird eine Testmethode erstellt, welche überprüft, dass
die Benutzeroverfläche auch das entsprechende
TextView
-Element enthält. Dieser Test besteht einfach darin zu testen, ob die
Referenz ungleich
null
ist.
public void testPreconditions() { assertNotNull(textView); }
Test der angezeigten Zeichenkette
Für diesen Test nutzen wir den in dem Feld
expectedString
gespeichert Wert aus der Ressourcendatei und den Wert des
TextView
-Objekts.
public void testText() { assertEquals(expectedString, (String)textView.getText()); }
Die fertige Testklasse sollte wie folgt aussehen:
package de.hszigr.mobileapps.helloworld.test; import android.test.ActivityInstrumentationTestCase2; import android.widget.TextView; import de.hszigr.mobileapps.helloworld.HelloWorldActivity; public class HelloWorldTest extends ActivityInstrumentationTestCase2{ private HelloWorldActivity activity; private TextView textView; private String expectedString; public HelloWorldTest() { super(HelloWorldActivity.class); } @Override protected void setUp() throws Exception { super.setUp(); activity = getActivity(); textView = (TextView) activity.findViewById(de.hszigr.mobileapps.helloworld.R.id.textview); expectedString = activity.getString(de.hszigr.mobileapps.helloworld.R.string.hello); } public void testPreconditions() { assertNotNull(textView); } public void testText() { assertEquals(expectedString, (String)textView.getText()); } }
Ausführung der Tests
Zum Starten des Tests wird mit einem Rechtklick auf die Testklasse das Menu Run As => Android JUnit Test aufgerufen. Die Ergebnisse des Tests werden so präsentiert, wie es von normalen JUnit-Tests her bekannt ist.