Programmierung in Java

Erstellung von Modultests mit der BlueJ-Entwicklungsumgebung



Im Folgenden sehen Sie anhand einer "Bilderserie" wie man automatisierte Tests einzelner Softwareeinheiten in ein Java-Projekt mit der BlueJ-Entwicklungsumgebung integriert.

  1. Starten Sie BlueJ:


    Öffnen Sie ein Projekt.



    Die "Bilderserie" zeigt Ihnen anhand des Beispielprojektes Konto, wie Sie erste Tests erstellen und ausführen können. Die aus der Vorlesung bekannte Klasse Konto wurde dazu um eine Methode getKontostand erweitert, welche den aktuellen Kontostand zurück liefert.
  2. Um die Testfunktionalität zu aktivieren, wählen Sie unter dem Menü-Punkt Werkzeuge den Punkt Einstellungen... aus.

    Es erscheint das Dialogfenster Einstellungen:

    Wählen Sie den Reiter Diverses und dort die Werkzeugeinstellung Testwerkzeuge anzeigen aus.

    Das BlueJ-Fenster sieht nun so aus:

    Im Kontextmenü jeder Klasse kann nun der Eintrag Testklasse erzeugen ausgewählt werden.

  3. Alle Testmethoden, die einer bestimmten Klasse zugeordnet werden können, werden in der zugehörigen Testklasse zusammengefasst.
    Im Falle des Beispielprojektes Konto muss zuerst die vorhandene Klasse KontoTest gelöscht werden, bevor die gleichnamige Klasse für automatisierte Tests angelegt werden kann.

    Die Testklasse wird über das Kontextmenü erzeugt. (Falls nötig, kann aber auch eine unabhängige Testklasse über die Schaltfläche Neue Klasse erzeugt werden.)

  4. Erzeugen Sie eine Testmethode, indem Sie den Mauszeiger über dem Testklassensymbol positionieren und die rechte Maustaste drücken. Es erscheint ein POP-UP-Menü:

    Wählen Sie den Punkt Erzeuge Testmethode... aus.

    Es erscheint eine Dialogbox, die den Namen der Testmethode erfragt. Dem eingegebenen Name wird automatisch die Vorsilbe test vorangestellt.

    Nach Bestätigen des Namens der Testmethode mit OK beginnt sofort die Aufzeichnung der Testfunktionalität:

    Alle folgenden Interaktionen werden aufgezeichnet und können durch den Aufruf der Testmethode wiederholt werden. Die Aufzeichnung endet, wenn der Button Beenden (die Testmethode wird gespeichert) oder der Button Abbrechen (die Testmethode wird verworfen) gedrückt wird.

  5. Beispiel für die Aufzeichnung einer einfachen Testmethode zum Testen der Methode einzahlen der Klasse Konto:
    Zuerst wird ein Objekt der Klasse Konto erzeugt.

    Um auf das erzeugte Objekt einzuzahlen, wird die Methode einzahlen aufgerufen.

    Nun muss der Übergabewert für die Methode eingegeben werden.

    Um den Zustand des Objekts zu testen, wird die Methode getKontostand() aufgerufen.

    Nun erscheint die Dialogbox Methodenergebnis. Hier müssen Sie festlegen, welches Ergebnis Sie beim Aufruf der Methode erwarten. Im vorliegenden Fall wird erwartet, dass die Variable kontostand nach dem Einzahlen den Wert 101,99 angenommen hat. Beim Vergleich von Fliesskommazahlen wird zusätzlich die Angabe einer Toleranz erwartet.

    Es stehen verschiedene Arten der Zusicherung zur Verfügung, um die Erwartungen an Methodenergebnisse zu spezifizieren. Es kann u.a. getestet werden, ob ein Ergebnis einem bestimmten Wert (String, Integer, Double...) entspricht, null ist oder ungleich null.
    Nachdem die Dialogbox mit Hilfe des Buttons Schliessen geschlossen wurde, wird die Aufzeichnung durch Auswählen des Buttons Beenden abgeschlossen.

    Das Ergebnis der Aufzeichnung ist die Methode testEinzahlen() der Testklasse:

    Auf diese Art und Weise können beliebig viele Tests innerhalb einer Testklasse definiert werden. In jeder Testmethode können beliebig viele Objekte erzeugt und Aktionen durchgeführt werden.

  6. Bevor die Testmethoden der Testklasse ausgeführt werden können, muss die Klasse übersetzt werden. Nach der Aufzeichnung einer Testmethode wird üblicherweise automatisch übersetzt. Gegebenenfalls (z.B. wenn die Methode händisch ergänzt wurde) muss die Klasse explizit übersetzt werden.
    Das Kontextmenü der Testklasse bietet die Möglichkeit, jede Testmethode einzeln auszuführen (hier: Test Einzahlen auswählen) oder alle Testmethoden ( alles testen auswählen).

    Wenn der Test erfolgreich war, wird dies im ersten Fall lediglich in der Statusleiste am unteren Rand des Fensters angezeigt.

    Wenn der Test nicht erfolgreich war bzw. wenn alle Tests durchlaufen wurden wird das Ergebnisfenster mit einer Übersicht über alle Testergebnisse angezeigt. Man kann erkennen, welche Tests nicht bestanden wurden (d.h. die Vorgaben bezüglich der Methodenergebnisse wurden nicht eingehalten) und welche fehlerhaft waren (d.h. ein unerwarteter Fehler trat auf). Der grüne Balken zeigt an, dass alle Tests erfolgreich waren!

  7. Es besteht die Möglichkeit, für alle Testmethoden innerhalb der Testklasse einen einheitlichen Ausgangszustand aus definierten Objekten zu erstellen. Dieser Objektzustand, das sogenannte Testgerüst, wird vor der Ausführung jeder Testmethode neu hergestellt.
    Erzeugen Sie zuerst die für die Testmethoden notwendigen Objekte und bringen Sie sie in den gewünschten Zustand.

    Durch Auswahl des Punktes Objektzustand speichern aus dem Kontextmenü der Testklasse, wird dieser Zustand als Testgerüst gespeichert.

    Dieser Objektzustand wird von nun an am Beginn der Testaufzeichnungen automatisch hergestellt. Die Testmethoden werden so vereinfacht.

    Falls das Testgerüst angepasst werden muss, kann der Objektzustand durch Auswahl des Punktes Objektzustand wiederherstellen aus dem Kontextmenü der Testklasse im unteren Bereich des Hauptfensters erzeugt werden. Dieser Zustand kann nun ergänzt und durch Auswahl des Punktes Objektzustand speichern wieder gespeichert werden, so dass das alte Testgerüst ersetzt wird.

  8. Neben der Durchführung von positiven Testfällen, die die erwartete Funktionalität überprüfen, sollten Sie auch negative Testfälle vorsehen. Negatives Testen überprüft, ob unerwünschte Aktionen, wie z.B. der Aufruf von Methoden mit falschen Parametern, tatsächlich scheitert und kontrolliert gehandhabt wird.


Für Rückmeldungen / Kritik bin ich stets dankbar.
Stand: 24. Januar 2014 Regina Piontek