• Keine Ergebnisse gefunden

Testen mit JUnit

N/A
N/A
Protected

Academic year: 2021

Aktie "Testen mit JUnit"

Copied!
28
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Vorlesung Software Engineering © Prof. Dr. Peter Knauber HS Mannheim

Testen mit JUnit

• Motivation

– Test First

– Design for Test

• Vorbereitung in Eclipse

• Testfall (eigentlich: Testklasse) zu einer Klasse erstellen

• Beispiel zur Demonstration

• Test-Szenario

• Prüf-Methoden

• Diverse Ergänzungen

(2)

Testen mit JUnit

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

Test First

• "Immer dann, wenn Du in Versuchung kommst, etwas wie eine print- Anweisung oder einen Debugger-Ausdruck zu schreiben, schreibe das stattdessen als Test." [Martin Fowler]

• Beispiele

– Während der Entwicklung: Schreibe vor dem Hinzufügen neuer Funktionalität zuerst Code, der diese neue Funktionalität benutzt

– Bei der Fehlersuche, beim Debugging: Wenn ein Fehler entdeckt wurde

schreibe Testcode, der den Fehler nachvollzieht, also zuerst fehlschlägt,

und erst dann funktioniert, wenn der Fehler beseitigt wurde

(3)

Testen mit JUnit

Vorlesung Software Engineering © Prof. Dr. Peter Knauber

HS Mannheim Folie 2

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

Partner-Diskussion:

Test First

• Diskutieren Sie mit einem Partner

– Welche Vorteile bietet es, wenn man Tests unmittelbar beim oder sogar vor dem Programmieren schreibt?

– Welche Nachteile stehen dem gegenüber?

• Dauer: 3 Minuten

(4)

Testen mit JUnit

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

Design for Test

• Design for Test bedeutet

– Der Fokus beim Entwickeln liegt auf der Schnittstelle, nicht (nur) der Funktionalität

– Der Code muss bequem aufrufbar sein – Der Code muss testbar sein

• "Möglicherweise ist der wichtigste Vorteil von all diesen Tests die Auswirkung auf Architektur und Design. Um ein Modul oder eine Anwendung testbar zu machen, muss sie geeignet entkoppelt sein.

Je testbarer es ist, desto modularer (desto besser gekapselt) ist die Software.

Die Berücksichtigung umfassender Akzeptanz- und Unit-Tests hat einen deutlich positiven Effekt auf die Struktur der Software."

[Robert Martin, Agile Software Development. Prentice Hall 2003]

(5)

Testen mit JUnit

Vorlesung Software Engineering © Prof. Dr. Peter Knauber

HS Mannheim Folie 5

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

• Demo

– JUnit in Eclipse-Projekt einbinden

– OO -> test.junit -> Calculations

(6)

Testen mit JUnit

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

Vorbereitung in Eclipse:

Bibliothek einbinden 1/3

Project -> Properties

(7)

Testen mit JUnit

Vorlesung Software Engineering © Prof. Dr. Peter Knauber

HS Mannheim Folie 7

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

Vorbereitung in Eclipse:

Bibliothek einbinden 2/3

(8)

Testen mit JUnit

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

Vorbereitung in Eclipse:

Bibliothek einbinden 3/3

C:\Program Files\eclipse\plugins

(9)

Testen mit JUnit

Vorlesung Software Engineering © Prof. Dr. Peter Knauber

HS Mannheim Folie 9

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

Testfall zu einer Klasse erstellen

(eigentlich: Testklasse mit Testfällen erstellen)

(10)

Testen mit JUnit

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

Testfall zu einer Klasse erstellen:

Name der Testklasse wählen

(11)

Testen mit JUnit

Vorlesung Software Engineering © Prof. Dr. Peter Knauber

HS Mannheim Folie 11

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

Testfall zu einer Klasse erstellen:

Methoden auswählen, die getestet werden sollen

(12)

Testen mit JUnit

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

Testfall zu einer Klasse erstellen:

generierter Programmcode

(13)

Testen mit JUnit

Vorlesung Software Engineering © Prof. Dr. Peter Knauber

HS Mannheim Folie 13

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

Testfall zu einer Klasse ausführen

Alle Methoden der Klasse, die als public void test...() { ... } deklariert sind,

werden nacheinander ausgeführt

(14)

Testen mit JUnit

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

Testfall zu einer Klasse ausführen:

negatives / positives Ergebnis

Kein Fehler

gefunden

Ein Fehler

gefunden

Fehler

Aufruf-Position;

Doppelklick möglich 7 Methoden

ausgeführt Kein Compiler-

Fehler

1 fehlgeschlagene

Testmethode

(15)

Testen mit JUnit

Vorlesung Software Engineering © Prof. Dr. Peter Knauber

HS Mannheim Folie 15

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

(16)

Testen mit JUnit

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

Beispiel:

eine zu testende Klasse mit zwei Methoden

• Demo

– Programm zeigen

– Testfälle erstellen und ausführen

Idee:

kleiner Rechenfehler, wie sie bei float/double

Nur zu Demo-Zwecken:

einmal dynamisch, einmal statisch

-

(17)

Testen mit JUnit

Vorlesung Software Engineering © Prof. Dr. Peter Knauber

HS Mannheim Folie 17

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

Erstellen der Testklasse

(18)

Testen mit JUnit

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

Ausführen der Testklasse

(19)

Testen mit JUnit

Vorlesung Software Engineering © Prof. Dr. Peter Knauber

HS Mannheim Folie 19

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

"Gründliches" Testen der Wurzel-Methode 1/2

Keine Fehlertoleranz

Besser:

(20)

Testen mit JUnit

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

"Gründliches" Testen der Wurzel-Methode 2/2

(21)

Testen mit JUnit

Vorlesung Software Engineering © Prof. Dr. Peter Knauber

HS Mannheim Folie 21

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

Verbesserter Code der Wurzel-Methode

(22)

Testen mit JUnit

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

(23)

Testen mit JUnit

Vorlesung Software Engineering © Prof. Dr. Peter Knauber

HS Mannheim Folie 23

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

Test-Szenario

Diese Klasse ist zu testen

Bibliotheks- Klasse

(teil)generierte

Hilfsklasse

(24)

Testen mit JUnit

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

Prüfmethoden (geerbt von TestCase)

• Konzept:

An bestimmten Stellen in einem (Test-)Programm soll sichergestellt (engl.: assert) werden, dass bestimmte Bedingungen erfüllt sind

• Die Klasse TestCase bietet viele Prüf-Methoden

– assertTrue( Boole'sche Bedingung ) – assertFalse( Boole'sche Bedingung )

– assertEquals( Soll-Wert, Ist-Wert ); mögliche Typen:

boolean, byte, char, int, long, short; Object, String (es wird mit equals verglichen)

– assertEquals( Soll-Wert, Ist-Wert, delta ); mögliche Typen:

double, float

– assertNull( Objekt ) – assertNotNull( Objekt )

– assertSame( Objekt1, Objekt2 ) – assertNotSame( Objekt1, Objekt2 ) – fail()

• Ist eine der Prüfbedingungen nicht erfüllt, wird ein

AssertionFailedError ausgelöst

(25)

Testen mit JUnit

Vorlesung Software Engineering © Prof. Dr. Peter Knauber

HS Mannheim Folie 25

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

(26)

Testen mit JUnit

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

Testfälle entwerfen

• Jede test...-Methode sollte nur einen Testfall prüfen, aber den komplett:

– Einen geeigneten Zustand vor der zu testenden Methode herstellen – Die zu testende Methode aufrufen

– Das Ergebnis (= Rückgabewert) der Methode überprüfen – Den Zustand nach dem Methodenaufruf überprüfen

• Jeder Testfall sollte unabhängig vom Vorgänger funktionieren können

• Die test...-Methoden sollten geeignet benannt sein

(27)

Testen mit JUnit

Vorlesung Software Engineering © Prof. Dr. Peter Knauber

HS Mannheim Folie 27

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

Vor- und Nachbereitung fürs Testen

• Folgende Methode wird vor jeder test...-Methode ausgeführt:

protected void setUp() throws Exception

• Folgende Methode wird nach jeder test...-Methode ausgeführt:

protected void tearDown() throws Exception

• Man sagt, es wird eine Test-Fixture auf- bzw. abgebaut

(28)

Testen mit JUnit

Motivation

Testfall erstellen Testklasse ausführen Eclipse- Vorbereitung

Demo-Beispiel

Prüf-Methoden Diverse ...

...

...

...

Test-Szenario

Trennen von Produktiv- und Test-Code

• Gleiche Package-Struktur in beiden Ordnern

• Export JAR-Datei:

nur die Packages

(= diejenigen Package-Anteile)

im src-Ordner exportieren

Referenzen

ÄHNLICHE DOKUMENTE

Du solltest Teiler oder Vielfache von Zahlen angeben und ggT und kgV zweier oder mehrerer Zahlen bestimmen können. Du solltest Primzahlen erkennen und eine Zahl in

• Selbsteinschätzung „Rechnen mit großen Zahlen“ mit Übersicht 17 - 30 Revision zum Thema „Rechnen mit großen Zahlen“.. Übungen zum Thema „Rechnen mit

Programmtext, der vor und nach jedem Test ausgef¨ uhrt werden soll, kann in Methoden mit den Annotationen @Before und. @After

Schritt: Milchtest nach ausgewählten Kriterien und Präsentation Kompetenzen und Unterrichtsinhalte: • Die Schüler werden in ihrer Rolle als mündige Verbraucher gestärkt und

Wenn sie den Objektnamen schreiben und einen Punkt eingeben erscheinen alle

Die Verantwortung für den Inhalt dieser Veröffentlichung liegt beim Autor/bei der Autorin... Wir

I Dynamische Tests führen das Programm unter kontrollierten Bedingungen aus, und prüfen das Ergebnis gegen eine gegebene Spezifikation. I Zentrale Frage: wo kommen die

I strukturelle Fehler, die zu einem fehlerhaften Verhalten führen (Programmabbruch, Ausnahmen, etc).