junit test driven developmentteam.fh-kl.de/uploads/media/junit_bf-ts-jt-mm_v0.1_final.pdf ·...

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

Upload: others

Post on 15-Jul-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 1

JUnitJUnit--

Test Driven DevelopmentTest Driven Development

Page 2: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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

Page 3: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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

Page 4: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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

Page 5: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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

Page 6: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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/

Page 7: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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)

Page 8: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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

Page 9: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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

Page 10: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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

Page 11: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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

Page 12: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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

Page 13: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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

Page 14: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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

Page 15: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 15

Implementierung - Überblick● Java (JUnit)● Übergabe als Parameter

→ keine Überlauffehler→ keine Übergabefehler

Page 16: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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 {...}

Page 17: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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);}

Page 18: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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 );}

Page 19: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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 );}

Page 20: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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 );}

Page 21: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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);}

Page 22: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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);}

Page 23: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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);}

Page 24: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 24

Let's Test!

fast!

Page 25: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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 );}

Page 26: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 26

erneuter Testlauf

Das richtige Bild für das Wochenabschlussmeeting!

Page 27: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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");}

Page 28: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 28

Weiterführendes

● Fixtures● Setter/Getter● Praxis

Page 29: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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);}[…]

}

Page 30: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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();}

}

Page 31: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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;

}

Page 32: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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

);}

Page 33: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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());}

}

Page 34: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 34

Praxis - Wohin mit den Files?

Ansatz 1 Ansatz 2

→ Releases umständlich → besser

Page 35: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 35

Praxis - Was wird getestet?● Sinnvolle Testcases

– Kopf benutzen!– nicht alle Permutationen testen

Page 36: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 36

Weiterführendes - Allgemeinhttp://www.junit.org

http://junit.sourceforge.net

Page 37: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 37

Weiterführendes - JUnitAPIhttp://junit.sourceforge.net/javadoc/

Page 38: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 38

Tutorials Text Iwww.laliluna.de

Page 39: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 39

Tutorials Text IIWeitere Links

www.jaredrichardson.net

www.scribd.com

Page 40: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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)

Page 41: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 41

Tutorials VideosVideo Links

www.ic.sunysb.edu

softwarehelp.magnify.net

Page 42: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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

Page 43: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

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

Page 44: JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf · JUnit-Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel

Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 44

Schluss - Ende

Vielen DankVielen Dankfür Ihrefür Ihre

AufmerksamkeitAufmerksamkeit