junit test driven developmentteam.fh-kl.de/uploads/media/junit_bf-ts-jt-mm_v0.1_final.pdf ·...
TRANSCRIPT
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 1
JUnitJUnit--
Test Driven DevelopmentTest Driven Development
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 2
Gliederung
1.Einleitung
1.1 Geschichte 1.2 Was sind Unit-Tests? 1.3 Failures/Errors 1.4 Ziele und Nutzen 1.5 Installation 1.6 Aufbau
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 3
Gliederung
2. Junit am Beispiel
2.1 Einleitung 2.2 Implementierung - Überblick 2.3 Testcases - Erfolg 2.4 Testcases - Misserfolg 2.5 Weiterführendes
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 4
Gliederung
3. Weiterführendes
3.1 Allgemein 3.2 JUnitAPI 3.3 Tutorials 3.3.1 Text 3.3.2 Videos 3.4 Links-Deutsch
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 5
Geschichte
● Framework zum Testen von Java-Programmen
● Entwickelt von Kent Beck und Erich Gamma
● Geeignet für automatisierte Unit-Tests einzelner Klassen
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 6
Geschichte
● Plattformübergreifend
● Basiert auf ursprünglich für Smalltalk entwickeltem Konzept (Sunit)
● http://sourceforge.net/projects/junit/
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 7
Was sind Unit-Tests?Definition:
Der Modultest (auch Komponententest oder engl. unit test) ist Teil des Softwaretests. Er dient zur Verifikation der Korrektheit von Modulen einer Software, z. B. von einzelnen Klassen. Nach jeder Änderung sollte durch Ablauf aller Testfälle nach Programmfehlern gesucht werden.
(Quelle : wikipedia.de – Stand : 2009-04-06)
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 8
Was sind Unit-Tests?
● Extreme-Programming -> Extreme Testing
Grundidee:
Zuerst Code zum automatischen testen schreiben, dann zu testenden Code schreiben
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 9
Failures/Error
● Failures:- werden erwartet- Signalisierung durch „AssertionFailedError“
● Error:- treten unerwartet auf- Signalisierung durch alle anderen Exceptions
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 10
Ziele und Nutzen
1. Ziele: ● Validierung des Quelltextes● Abläufe kennenlernen● Leicht zu schreiben● Zielgruppe : Programmierer
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 11
Ziele und Nutzen
2. Nutzen:● qualitativ besserer Code● Dokumentation einfacher/besser● Fehler werden dokumentiert● Tatsächliche Ergebnisse und Erwartete werden verglichen und Abweichungen gemeldet
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 12
Installation
Netbeans/Eclipse:● schon integriert, Installation entfällt
Generell: ● JUnit herunterladen, entpacken, in classpath
integrieren
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 13
Aufbau
● Java-Werkzeug● besteht aus mehreren Klassen● Alle Klassen von JUnit sind im Paket junit.framework enthalten● Prinzip: Zu jeder Klasse eine eigene Testklasse – Vorteil: Kein „Test-Code“ in eigentlicher Klasse
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 14
Beispiel - Einführung● 3 Seiten a,b,c gegeben● gültiges Dreieck
● a+b > c● b+c > a● a+c > b
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 15
Implementierung - Überblick● Java (JUnit)● Übergabe als Parameter
→ keine Überlauffehler→ keine Übergabefehler
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 16
Implementierung - Rahmenpublic enum eTriangleType {
EQUILATERAL, ISOSCELES, GENERAL; }
public final class DetermineMyTriangle {...public DetermineMyTriangle(Triangle t) {…}public DetermineMyTriangle(int a, int b, int c) {…}public eTriangleType getType() {...}
}public class NoPossibleTriangleException
extends Exception {...}
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 17
Implementierung - Basics
import org.junit.*;import static org.junit.Assert.*;import junit.framework.JUnit4TestAdapter;
[…]
public static junit.framework.Test suite() { return new JUnit4TestAdapter(TestClass.class);}
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 18
Implementierung - Was wird richtig?● gleichschenklig
@Test public void testIsosceles() throws […] { Triangle tIsosceles = new Triangle(2,2,3); assertTrue( new DetermineMyTriangle(tIsosceles).getType() == eTriangleType.ISOSCELES );}
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 19
Implementierung - Was wird richtig?● gleichseitig
@Test public void testEquilateral() throws […] { Triangle tEquilateral = new Triangle(1,1,1); assertTrue( new DetermineMyTriangle(tEquilateral).getType() == eTriangleType.EQUILATERAL );}
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 20
Implementierung - Was wird richtig?● allgemein
@Test public void testGeneral() throws […] { Triangle tGeneral = new Triangle(4,2,3); assertTrue( new DetermineMyTriangle(tGeneral).getType() == eTriangleType.GENERAL );}
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 21
Implementierung - Was wird falsch?● mind. eine Seite negativ
@Test(expected= NoPossibleTriangleException.class) public void testNegativeSide() throws NoPossibleTriangleException { new Triangle(-1,-1,-1);}
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 22
Implementierung - Was wird falsch?● mindestens eine Seite null
@Test(expected= NoPossibleTriangleException.class) public void testZeroSide() throws NoPossibleTriangleException { new Triangle(0,0,0);}
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 23
Implementierung - Was wird falsch?● nicht konstruierbar
@Test(expected= NoPossibleTriangleException.class) public void testSideTooSmall() throws NoPossibleTriangleException { new Triangle(3,4,9);}
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 24
Let's Test!
fast!
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 25
FailureTrace
@Test public void testIsosceles() throws […] { Triangle tIsosceles = new Triangle(1,1,2); assertTrue( new DetermineMyTriangle(tIsosceles).getType() == eTriangleType.ISOSCELES );}
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 26
erneuter Testlauf
Das richtige Bild für das Wochenabschlussmeeting!
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 27
Implementierung - Basics ohne IDEpublic static void main(String[] args) {
org.junit.runner.JUnitCore.main("triangle.TestClass");}
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 28
Weiterführendes
● Fixtures● Setter/Getter● Praxis
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 29
Fixture - @Before@Before immer jeweils vor @Test
public class TestIT {DoSomething sth;
@Beforepublic void setUp() {
sth = new DoSomething(13);}[…]
}
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 30
Fixture - @After@After immer jeweils nach @Test public class TestIT2 {
File output;
@Before public void createTestData() {output = new File(…);
}
@Test public void testWrite() {…}@After public void clearTestData() {
output.delete();}
}
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 31
Fixture - @BeforeClass@BeforeClass einmalig vor den Tests@BeforeClasspublic void removeExistingData() {
output = new File("test.xml");if(output.exists())
output.delete();output = null;
}
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 32
Setter@Beforepublic void setUp() {
sth = new DoSomething(13);}
@Testpublic void testSet() {
sth.setX(42);assertEquals(
"Error DoSomething.setX(int)",42,sth.x
);}
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 33
Getter
public class TestIT {DoSomething sth;
@Beforepublic void setUp() {
sth = new DoSomething(13);}
@Testpublic void testGet() {
assertEquals(13, sth.getX());}
}
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 34
Praxis - Wohin mit den Files?
Ansatz 1 Ansatz 2
→ Releases umständlich → besser
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 35
Praxis - Was wird getestet?● Sinnvolle Testcases
– Kopf benutzen!– nicht alle Permutationen testen
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 36
Weiterführendes - Allgemeinhttp://www.junit.org
http://junit.sourceforge.net
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 37
Weiterführendes - JUnitAPIhttp://junit.sourceforge.net/javadoc/
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 38
Tutorials Text Iwww.laliluna.de
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 39
Tutorials Text IIWeitere Links
www.jaredrichardson.net
www.scribd.com
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 40
Tutorials Text III
Bücher:● JUnit kurz und gut
Google Books (Junit Kurz und gut)
● Unit test mit JUnit
Google Books (Unit Test mit JUnit)
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 41
Tutorials VideosVideo Links
www.ic.sunysb.edu
softwarehelp.magnify.net
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 42
Links-Deutsch I
www.torsten-horn.de
www.wikipedia.de
www.richard.cyganiak.de
www.tu-darmstadt.de
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 43
Links-Deutsch IIEin Paar links zum JavaMagazine
Titelthema: Eclipse vs. Netbeans
Titelthema: Java Data Objects
Titelthema: Java Web Services
Titelthema: Java Enterprise Edition 5
Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 44
Schluss - Ende
Vielen DankVielen Dankfür Ihrefür Ihre
AufmerksamkeitAufmerksamkeit