Systematisches Testen

Ähnliche Dokumente
JUnit 4 Tutorial. Wolfgang Stöttinger

Programmieren. JUnit-Tests. Heusch -- Ratz -- Institut für Angewandte Informatik

JUnit - Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 1

Kurzanleitung JUnit I S A. 1 Grundlagen. 1.1 Begriffsdefinitionen. 1.2 Empfehlungen

Programmieren. JUnit-Tests. Heusch -- Ratz -- Institut für Angewandte Informatik

Enterprise JavaBeans Überblick

Unit Tests. Programmiermethodik. Eva Zangerle Universität Innsbruck

Testgetriebene Entwicklung mit JUnit4

Programmiertechnik II

PT2. Unit06: Modultests & JUnit. Sven Köhler Hasso-Plattner-Institut

SEP 114. Design by Contract

Testgetriebene Entwicklung

Test-driven development JUnit-Test. Lars Varain

OOSE_02E Testen mit BlueJ/JUnit 4

Kurzanleitung JUnit. 1 Grundlagen. 1.1 Begriffsdefinitionen. 1.2 Empfehlungen

OOSE4 Testen mit BlueJ/JUnit 4

Verträge und objektorientierter Entwurf

Unit Testing mit JUnit. Dr. Andreas Schroeder

Objektorientierte Programmierung Studiengang Medieninformatik

Testing & Logging DBS. Tobias Lingelmann SEP

Mock-Objekte. Universität Karlsruhe (TH) Fakultät für Informatik Lehrstuhl für Programmiersysteme. Forschungsuniversität gegründet 1825

JUnit. Software-Tests

Testgesteuert Entwickeln mit JUnit 4

Software-Engineering Software-Management

Funktionales Testen. Lehrstuhl für Software Engineering Friedrich-Alexander-Universität Erlangen-Nürnberg

Vererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus

Web-Testen mit JUnit und HttpUnit. Kai Schmitz-Hofbauer Lehrstuhl für Software-Technik Ruhr-Universität Bochum

Vom Testkonzept zu JUnit

Klassenvariablen und Klassenmethoden

Testen und Debugging

C# - Einführung in die Programmiersprache Fehler abfangen. Leibniz Universität IT Services Anja Aue

3. Dokumentieren und Testen Advanced Programming Techniques Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Programmentwicklung in Java: Javadoc & JUnit

JUnit. HierarchicalContextRunner. Mehr Struktur. TDD. Clean Code. Verantwortung. Skills. Namics. Stefan Bechtold. Principal Software Engineer.

Property Based Testing

Einführung in die Informatik Tools

Software Engineering Test Automatiserung und Junit, Test Driven ( test first) Development

Programmieren in Java

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Exceptions und Vererbung

IT I: Heute. Nachbetrachtung Wissensüberprüfungen. Einführung Vererbung. Roboter in becker.robots IT I - VO 5 1

Sichtbarkeiten, Klassenmember und -methoden

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen

Softwaretests. verschiedene Testformen Testen im V-Modell: Anwendungsszenarien. Tests. Tests. Tests. Anforderungs- definition. Abnahmetest.

Java Vererbung. Inhalt

1 Abstrakte Klassen, finale Klassen und Interfaces

Programmieren 1 09 Vererbung und Polymorphie

Methoden und Wrapperklassen

Testen von Softwaresystemen. 13. Januar 2015

Das Test-Framework JUnit ETIS SS04

Software Engineering in der Praxis

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Programmieren in Java -Eingangstest-

Programmierung Nachklausurtutorium

Unit Tests mit Junit 4. Dario Borchers

Einführung in die Programmierung 1

Objektorientierte Programmierung Studiengang Medieninformatik

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Fragen zur OOP in Java

Programmieren I. Übersicht. Vorlesung 12. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011

Systematisches Testen der Funktionalität von Softwaresystemen. 17. Juni 2015

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Coding-Standards und Dokumentation

Transkript:

Systematisches Testen

SEP 136 Unit Testing Objektorientierte Entwicklung Entwicklung von vielen unabhängigen Einheiten (Klassen, Methoden), aus denen das Gesamtprogramm zusammengesetzt wird. Ziel: Wenn sie nur alle Einheiten korrekt verhalten, dann verhält sich das Programm wie gewünscht. Unit Testing systematisches Testen der einzelnen Einheiten zwingt Entwickler zu planen und über das gewünschte Verhalten der Programmeinheiten nachzudenken unterstützt Design by Contract: teste stichprobenartig, dass alle Klassen ihre Verträge einhalten

SEP 137 Unit Testing mit JUnit Was wird getestet public/protected-methoden private-methoden können mit assert getestet werden. Wie wird getestet Tests sind vom Programm separate Klassen (man kann Tests als Teil der Dokumentation auffassen). Darin wird eine beliebige Anzahl von Testfunktionen implementiert. Testfunktionen mit Java-Annotationen gekennzeichnet. Die Tests werden dann durch ein bestimmtes Programm ausgeführt und die Ergebnisse werden ausgewertet (üblicherweise durch Tools wie Eclipse oder NetBeans).

SEP 138 Java-Annotationen Mit Annotationen kann man Java-Programme mit nützlichen Zusatzinformationen versehen werden. In Java sind sieben Arten von Annotationen eingebaut, z.b. @Deprecated, @Override, @SuppressWarnings Man kann eigene Annotationen definieren. In JUnit 4 sind zum Beispiel @Test, @Before, @After, @BeforeClass, @AfterClass und @Ignore definiert.

SEP 139 Annotationen Beispiel Kennzeichnung von Klassen/Methoden, die nicht mehr benutzt werden sollen und nur aus Kompatibilitätsgründen noch vorhanden sind. @Deprecated public class A {... Compiler erzeugt Warnung, wenn die Klasse A benutzt wird.

SEP 140 Annotationen Beispiel Kennzeichne Funktionen, die eine bereits existierende Funktion in einer Oberklasse überschreiben mit @Override. public class A { public void f(list l) {... public class B extends A { @Override public void f(list l) {...

SEP 141 Annotationen Beispiel @Override hilft häufige Fehler zu finden: public class A { public class B extends A { public void f(list l) { @Override... public void f(linkedlist l) {... private void g() {... @Override public void g() {... Compilerfehler: Überladen statt Überschreiben.

SEP 142 JUnit 4 Tests sind in separat vom eigentlichen Programm in eigenen Klassen implementiert (z.b. eine Testklasse für jede zu testende Klasse) Testklasse kann eine beliebige Anzahl von Tests implementieren. Einzelne Tests werden durch Methoden in der Testklasse implementiert: durch Annotation @Test als Test gekennzeichnet beliebiger Methodenname public und ohne Argumente Die Tests in einer Testklasse werden automatisiert ausgeführt und ein Gesamtergebnis angezeigt.

SEP 143 Testfunktionen Allgemeine Funktion von Testfunktionen 1 Konstruktion der zu testenden Situation Objekte der zu testenden Klassen erzeugen Objekte in den gewünschten Zustand versetzen 2 Überprüfung des erwarteten Ergebnis Funktionen asserttrue(test), assertequals(x, y),... in org.junit.assert. Ist das erwartete Ergebnis eine Exception, kann man das in der Annotation angeben: @Test(expected = ExceptionName.class)

SEP 144 JUnit 4 Beispiel import org.junit.*; import static org.junit.assert.assertequals; public class BoardTest { @Test public void testfood1() { BoardServerToClient b = new BoardServerToClient(100, 100); int x = 94, y = 23, a = 34; b.setfood(x, y, a); assertequals(b.getfood(x,y), a); @Test(expected = java.lang.indexoutofboundsexception.class) public void testfood2() { BoardServerToClient b = new BoardServerToClient(100, 100); int x = 100, y = 23, a = 34; b.setfood(x, y, a);

SEP 145 JUnit 4 Ausführen der Tests Eclipse, NetBeans,... bieten bequeme Möglichkeiten, Tests ablaufen zu lassen und Ergebnisse anzuzeigen. Tests direkt ausführen: junit.jar von www.junit.org beziehen und zum Classpath hinzufügen. Programm und Testklassen kompilieren. Ausführung der Tests mit java org.junit.runner.junitcore BoardTest JUnit version 4.3.1..E Time: 0.028 There was 1 failure: 1) testfood2(boardtest) java.lang.assertionerror: FAILURES!!! Tests run: 2, Failures: 1 (Stack backtrace)

SEP 146 Weitere Annotationen Eine Testklasse enthält oft viele ähnliche Testfälle. Programmtext, der vor und nach jedem Test ausgeführt werden soll, kann in Methoden mit den Annotationen @Before und @After geschrieben werden. Alle mit @Before markierten Methoden werden vor jedem Test aufgerufen (in unbestimmter Reihenfolge). Alle mit @After markierten Methoden werden nach jedem Test aufgerufen (in unbestimmter Reihenfolge).

SEP 147 Beispiel @Before public class BoardTest { private BoardServerToClient b; @Before public void initboard() { b = new BoardServerToClient(100, 100); @Test public void testfood1() { int x = 94, y = 23, a = 34; b.setfood(x, y, a); assertequals(b.getfood(x, y), a); @Test(expected = java.lang.indexoutofboundsexception.class) public void testfood2() { b.setfood(100, 23, 34);

SEP 148 Einmaliges Einrichten der Testumgebung In manchen Fällen (z.b. teure @Before-Funktionen) ist es günstig, eine Testsituation einmal einzurichten und dann für alle Testfälle zu benutzen. Statische Methoden mit Annotationen @BeforeClass und @AfterClass. Alle mit @BeforeClass markierten Methoden werden einmal vor den Tests ausgeführt. Alle mit @AfterClass markierten Methoden werden einmal nach den Tests ausgeführt.

SEP 149 Entwurf von Tests Was sollte man mit Unit-Tests prüfen? Methoden sowohl mit erwarteten als auch unerwarteten Eingaben testen Rand- und Ausnahmefälle prüfen Werden Fehler richtig behandelt? Schreibe Tests, um zu verhindern, dass einmal aufgetretene Fehler nochmal auftreten (z.b. durch unvorsichtiges Revert). Tests sollten einen (gedachten) Vertrag möglichst gut stichprobenartig überprüfen.