TDD. mit JUnit & Mockito. Tobias Trelle, codecentric

Ähnliche Dokumente
Iterativ. Inkrementell

Fortgeschrittenes Programmieren mit Java. Test Driven Development

Design for Testability in der Praxis David Völkel, codecentric AG

Test Driven Development

FWP Komponentenorientierte Softwareentwicklung Test-Driven-Development mit Java

JUnit. Unit testing unter Java

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

5. Dokumentieren und Testen Advanced Programming Techniques. Wintersemester 2009 / 2010 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

Spock und Geb (WebDriver) Wie können freie Werkzeuge zum strukturierten Testen von Web-Applicationen eingesetzt werden?

CONTINUOUS DELIVERY. Entmystifiziert. codecentric AG

Programmiertechnik II

Effizientes und effektives Testen von Embedded SW mit Google Test. Michael Bernhard

Komponenten-basierte Entwicklung Teil 6: Einführung in JUnit

Beispiel: DB-Mock (1/7)

Fabian Schmengler Pragmatisches Unit Testing. Meet Magento DE 2015

A very very very very short intro to. Testing

The Art of Unit Testing

Unit Tests in der Testgetriebenen Entwicklung

Automatisierte Regressionstests per Knopfdruck sparen Zeit und Ressourcen sichern die Qualität schonen die Nerven

Geister, Gurken und Halbmetalle. Tools für Web-UI-Acceptance-Tests. Malte Clasen

Das Test-Framework JUnit ETIS SS04

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

Gutes Benehmen Akzeptanztest-getriebene Software-Entwicklung in einem Web-Projekt

DevOps bei den ID Build-Automatisierung statt Silo-Betrieb

Programmieren in Java

Konsequent agile Entwicklung mit funk4onaler Programmierung. Michael Sperber

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

Info: Standard DO-178B. 5. Mocking. Zusammenspiel von Klassen testen. Allgemein: Klassen testbar machen

Testen mit Pfefferminzgeschmack

Refactoring Unit-Tests

Open-Source-Werkzeugkasten für Software-QS :15-11:15 Uhr Zagrebsaal I

CONTINUOUS DELIVERY. codecentric AG

Programmierprojekt. Anne0e Bieniusa Sommersemester 2014

Effizientes Programmieren

CamelCaseCon 2011 Vortrag von Stefan Glase am Statische Code-Analyse für Groovy & Grails mit CodeNarc

Code verifizieren mittels

Thema: Testen von objektorientierter Software

Test-Driven Design: Ein einfaches Beispiel

Unit Testing mit JUnit. Dr. Andreas Schroeder

Inhaltsverzeichnis. Geleitwort Einleitung... 13

Markus Wichmann. Testen von Java Code mit. JUnit

Literatur und Web. Komponenten WS 2014/15 Teil 8/Mocks

Allgemein: Klassen testbar machen. 5. Mocking. Mocks programmieren. Zusammenspiel von Klassen testen

extreme Programming (XP)

Testen und Debuggen von Webanwendungen

Web-Anwendungen mit Arquillian testen

Unit Tests. Programmiermethodik. Eva Zangerle Universität Innsbruck

Refactoring von Legacy Systemen. Jochen Winzen andrena objects ag

Tipps & Tricks für das Testen von Microservices

Echolot Qualitätssicherung mit Sonar

Wer bin ich. > Senior Consultant, Architekt und Trainer (MATHEMA Software GmbH) > 25+ Jahre Software > 12+ Jahre Java Enterprise > 7+ Jahre.

Design for Testability in der Praxis Referent: David Völkel

Aufgaben Objektentwurf

Unit-Test Theorie und Praxis. Stephan Seefeld, INGTES AG

JGiven: Ein entwicklerfreundliches BDD-Framework für Java

Continuous Everything

Gegenseitige Beeinflussungen von Testautomatisierung, Testmanagement und Entwicklung

Scriptbasierte Testautomatisierung. für Web-Anwendungen

Agile Methoden. David Tanzer. Oliver Szymanski

Stefan Roock Bernd Schiffer Beispiel Grails

Agile Entwicklung für ios und Android

Testen mit JUnit. Martin Wirsing. Ziele. in Zusammenarbeit mit Michael Barth, Philipp Meier und Gefei Zhang

SEQIS 10 things API Testing

TDD für iphone OS. xpdays Tammo Freese

Programmieren in Java

Testgetriebenes Ajax. Johannes Link unabhängiger Softwarecoach Marco Klemm andrena objects ag

Lean Modeling - Software Systeme einfach und präzise mit natürlicher Sprache spezifizieren

Gestatten: Hudson. Augmented Development. Thomas Kruse. Sun Campus Ambassador

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Software Engineering in

Prüfung Software Engineering II (IB)

Unit Tests mit Junit 4. Dario Borchers

Wie wird mein Code testbar? Referent: David Völkel

INTEGRATION TEST HELL ODER WIE INTEGRATIV SOLL ICH TESTEN?

Effektiver Einsatz von Code-Reviews

Struts 2 Das Imperium schlägt zurück?

Qualitätssicherung von Software am Beispiel von Unit Testing. Klaus Kusche, Mai 2012

1. Einführung und Unit Testing Programmieren / Algorithmen und Datenstrukturen 2

Testen von graphischen Benutzeroberflächen. 26. Juni 2013

Wie ich lernte die API zu lieben. 19. März sic[!]sec GmbH Industriestraße Gröbenzell

Continuous Integration

Test-Driven Developement Eine Einführung

Rene Schneider GEBIT Solutions GmbH. Integrity - ein innovatives Tool zur Acceptance-Test-Automatisierung

Testgetriebene Web-Entwicklung mit Ruby on Rails

Der EMF-generierte Code. 7. November 2012

Der Weisheit letzter Schluss:

Praktische Übung 'JUnit-Test'

aformatik Training & Consulting GmbH & Co. KG Eine Einführung in das automatisierte Testen mit dem Robot-Framework Thomas Gauss

Christian Meder inovex. Sauberes Grün QS für Android

Unit Testing mit NUnit

Anforderungsgetriebene Webentwicklung mit Grails:

Überblick. Einleitung. Unit-Tests. JUnit. HelloWorld Beispiel. Praktische Beispiele. Referenzen

Qualität von Software - Prof. Schlingloff, Lackner - SS2013 DYNAMISCHER TEST. Whitebox Testen mit JUnit

Software Engineering I

Systematisches Testen

Prozessautomatisierung mit BPMN 2.0 und Java.

public class SternchenRechteckGefuellt {

Build Management. Präsentation von Daniel Mies

SAP Software Engineering live Agile! Agiles Projektmanagement und Clean Code im SAP-Umfeld

MOBILE ENTERPRISE APPLICATION PLATFORM (MEAP)

Transkript:

TDD mit JUnit & Mockito Tobias Trelle, codecentric AG @tobiastrelle 1

Tobias Trelle Software Architekt @ codecentric AG Twitter: @tobiastrelle Slideshare: http://de.slideshare.net/tobiastrelle/ GitHub: https://github.com/ttrelle

2 Agenda TDD - Test Driven Development JUnit Mockito Zusammen in Aktion! 3

Tests should be written FIRST Fast: Einzeln und in Summe schnell ausführbar Isolated: Unabhängig voneinander und externen Faktoren Repeatable: Immer gleiche Ergebnisse liefern Self-validating: Test-Ergebnis ist ohne menschl. Aufsicht feststellbar Timely: Zeitnah 4

TDD Test Driven Development 5. 1

TDD Lifecycle 5. 2

TDD Lifecycle Red --> Green: Minimale Implementierung / "Fake it" Refactor: Code-Duplikation beseitigen Green --> Red: neuer Test Stets kleine bis kleinste Iterationen, diese führen zu Verallgemeinerungen 5. 3

Vorteile von TDD Schnelles Feedback Hohe Test-Abdeckung Code ist testbar Sicherheit bei Refactorings Testfall als Spezifikation der Implementierung 5. 4

Literatur

5. 5

JUnit http://junit.org 6. 1

JUnit Java-Implementierung von xunit Test Framework Defacto-Standard im Java-Bereich 6. 2

Aktuelle stabile Version: 4.12 <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>4.12</version> <scope>test</scope> </dependency> 6. 3

JUnit Features Defintion von Test Fixtures Test-Ausführung Assertions Rules Definition Test-Suiten Integration in IDE / CI-Build 6. 4

JUnit - Einfaches Beispiel public class VnrGeneratorTest { private VnrGenerator generator; /** Unit under test. */ private LocalDateTime stichtag; /** Fixture */ @Before public void setup() { generator = new VnrGenerator(); stichtag = LocalDateTime.of(2017, Month.FEBRUARY, 17, 0, 0); } @Test public void vnr_erzeugung() { // gegeben sei String sachgebiet = "LN"; String name = "Fasel"; // wenn String vnr = generator.neuevnr(sachgebiet, stichtag, name); } } // dann assertthat(vnr, is("ln-20170217-f001")); 6. 5

TDD Live Coding #1 6. 6

Mockito http://site.mockito.org/ 7. 1

Tasty mocking framework for unit tests in Java to mock: etwas vortäuschen

7. 2 Aktuelle stabile Version: 2.7.15 <dependency> <groupid>org.mockito</groupid> <artifactid>mockito-core</artifactid> <version>2.7.15</version> <scope>test</scope> </dependency> 7. 3

Mockito Features Mocking Spying Captors Verifying 7. 4

Mocken von Abhängigkeiten 7. 5

public class VnrGenerator { private VnrDao dao; VnrGenerator benötigt VnrDao public VnrGenerator(VnrDao dao) { this.dao = dao; } public String neuevnr(string sachgebiet, LocalDate stichtag, Stri final String sgdatum = // sachgebiet + "-" + // stichtag.format(datetimeformatter.iso_local_date); final String ersterbuchstabe = nachname.substring(0,1); final int lnr = ermittlelaufnummerzu(stichtag, ersterbuchstab } return sgdatum + "-" + String.format("%s%03d", ersterbuchstab private int ermittlelaufnummerzu(localdate stichtag, String erste return dao.naechstefreilaufnummer(stichtag, ersterbuchstabe); } }

7. 6 Mockito Fixture @RunWith(MockitoJUnitRunner.class) public class VnrGeneratorTest { @Mock private VnrDao daomock; private VnrGenerator generator; /** Unit under test. */ private LocalDate stichtag; } /** Fixture */ @Before public void setup() { generator = new VnrGenerator(daoMock); stichtag = LocalDate.of(2017, Month.FEBRUARY, 28); }...

7. 7 Mockito im Testfall @Test public void vnr_erzeugung() { // gegeben sei String sachgebiet = "LN"; String name = "Fasel"; when( daomock.naechstefreilaufnummer(stichtag, "F") ).thenreturn(1); // wenn String vnr = generator.neuevnr(sachgebiet, stichtag, name); } // dann verify(daomock).naechstefreilaufnummer(stichtag, "F"); verifynomoreinteractions(daomock); assertthat(vnr, is("ln-2017-02-28-f001"));

7. 8 Mockito im Testfall - BDD Style @Test public void vnr_erzeugung() { // gegeben sei String sachgebiet = "LN"; String name = "Fasel"; given( daomock.naechstefreilaufnummer(stichtag, "F") ).willreturn(1); // wenn String vnr = generator.neuevnr(sachgebiet, stichtag, name); } // dann then(daomock).should().naechstefreilaufnummer(stichtag, "F"); then(daomock).shouldhavenomoreinteractions(); assertthat(vnr, is("ln-2017-02-28-f001"));

7. 9 TDD Live Coding #2 7. 10

Grenzen von Mockito Finale Klassen / Methoden Statische Methoden Abhilfe: PowerMock für Mockito 7. 11

Danke für Ihre Aufmerksamkeit Tobias Trelle, codecentric AG @tobiastrelle TDD mit JUnit & Mockito - Tobias Trelle, codecentric AG 8