JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf ·...

Post on 15-Jul-2020

10 views 0 download

Transcript of JUnit Test Driven Developmentteam.fh-kl.de/uploads/media/JUnit_BF-TS-JT-MM_v0.1_final.pdf ·...

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