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

Ähnliche Dokumente
TDD. mit JUnit & Mockito. Tobias Trelle, codecentric

Testgetriebene Entwicklung mit JUnit4

JUnit 4 Tutorial. Wolfgang Stöttinger

Test-driven development JUnit-Test. Lars Varain

OOSE4 Testen mit BlueJ/JUnit 4

Test Driven Development

Fortgeschrittenes Programmieren mit Java. Test Driven Development

Das Test-Framework JUnit ETIS SS04

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

Systematisches Testen

JUnit. Unit testing unter Java

Testen mit JUnit. Motivation

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

JUnit. Software-Tests

Unit Tests. Programmiermethodik. Eva Zangerle Universität Innsbruck

Testen von graphischen Benutzeroberflächen. 26. Juni 2013

Literatur und Web. Komponenten WS 2014/15 Teil 6/JUnit

Programmierprojekt. Anne0e Bieniusa Sommersemester 2014

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

Testgesteuert Entwickeln mit JUnit 4

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

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

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

A very very very very short intro to. Testing

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

Test-Driven Design: Ein einfaches Beispiel

Iterativ. Inkrementell

Programmierprojekt: So0ware Tests. Anne6e Bieniusa Sommersemester 2017

Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn. Testen. Tutorial im Rahmen des Software(technik)praktikums SS 2012

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

Enterprise JavaBeans Überblick

Test-Driven Design: Ein einfaches Beispiel

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

Programmierung 2 Studiengang MI / WI

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

Swp08-6 Verantwortliche: Yundensuren, Baigalmaa. Testkonzept

Unit Tests mit Junit 4. Dario Borchers

Refactoring Unit-Tests

Software Engineering. 3. JUnit und ANT. Franz-Josef Elmer, Universität Basel, HS 2012

Kurzanleitung JUnit. 1 Grundlagen. 1.1 Begriffsdefinitionen. 1.2 Empfehlungen

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

Effizientes Programmieren

Beispiel: DB-Mock (1/7)

Programmierung 2 Studiengang MI / WI

Thema: Testen von objektorientierter Software

Testgetriebene Entwicklung

Programmiertechnik II

Unit Testing mit JUnit. Dr. Andreas Schroeder

Markus Wichmann. Testen von Java Code mit. JUnit

FWP Komponentenorientierte Softwareentwicklung Test-Driven-Development mit Java

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

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

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

Unit Tests in der Testgetriebenen Entwicklung

Gliederung der Folien

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

Testen mit JUnit. Apcon Workplace Solutions Member of itelligence. Testen von Java-Code mit JUnit. ÿstruktur eines Testfalls

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

Java für C++ Programmierer

Inhaltsverzeichnis. Geleitwort Einleitung... 13

Agile Entwicklung für ios und Android

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

Testen mit JUnit. Martin Wirsing. Ziele. Arten von Tests. Testen. Whitebox-Test. Unit-Test

Testen mit JUnit. Martin Wirsing. Ziele. Arten von Tests. Testen. Lernen Unit Tests zu schreiben Lernen mit Unit-Testen mit JUnit durchzuführen

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

OOP. Tagesprogramm. Aspektorientierte Programmierung. Annotationen

Aspektorientierte Programmierung

The Art of Unit Testing

Software Engineering. 4. Unit Testing und Refactoring. Franz-Josef Elmer, Universität Basel, HS 2007

JUnit a Cook s Tour. Framework in Java Automatisierter Ablauf von Testfällen Testläufe kombinieren. Unterlagen als PDF auf der Übungsseite!

Testen von graphischen Benutzeroberflächen. 24. Juni 2015

Testen von grafischen Benutzeroberflächen

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

Der EMF-generierte Code. 7. November 2012

Android Testautomatisierung mit dem Framework Robotium

Software Engineering in der Praxis

Bessere Tests mit JUnit 4.x Marc Philipp. 1. Juli 2010

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

Software Engineering in der Praxis

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

Micro Focus Unit Testing Framework in Visual COBOL 3.0. Rolf Becking 29.August 2017

Mocha. Ein Ruby Mocking und Stubbing Framework. von Thilo Utke. Werd ich drüber reden Erst was zu mit.

FHZ. K13 Rekursion. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt

-Testen verteilter Anwendungen

Semesterprojekt Semantic Text Browsing. Ulf Leser, Philippe Thomas (, Lars Döhling)

Refactoring von Legacy Systemen. Jochen Winzen andrena objects ag

Marc Philipp. Senior Software Karlsruhe. JUnit Maintainer seit Web:

Reverse Engineering Legacy Code

Testen im Software- Lebenszyklus

Android-Testautomatisierung mit Robotium

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

Stefan Roock Bernd Schiffer Beispiel Grails

Verifikation von Programmen in Java 5

Software - Testung ETIS SS05

Ein erster Blick. Eclipse und Debugging. Anlegen von Projekten. Wissenswertes...

Unit Testing, SUnit & You

Echolot Qualitätssicherung mit Sonar

Testgetriebene Entwicklung mit JUnit

Software Testing mit JUnit 5. Architektur und neue Features

Transkript:

JUnit. HierarchicalContextRunner. Mehr Struktur. TDD. Clean Code. Verantwortung. Skills. Stefan Bechtold. Principal Software Engineer. 16. Oktober 2014

Aus dem Alltag eines Entwicklers Ein typischer (Unit-) Test package xpdays2014.samples.stack.defaultrunner; import static org.junit.assert.*; import org.junit.before; import org.junit.test; import xpdays2014.samples.stack.stack; public class StackTest { private Stack stack; @Before public void setup() throws Exception { stack = Stack.make(2); (expected = Stack.IllegalCapacity.class) public void whencreatingastackwithnegativesize_shouldthrowillegalcapacity() throws Exception { Stack.make(-1); (expected = Stack.Overflow.class) public void whencreatingstackwithzerocapacity_anypushshouldoverflow() throws Exception { stack = Stack.make(0); public void newlycreatedstack_shouldbeempty() throws Exception { asserttrue(stack.isempty()); assertequals(0, stack.getsize()); (expected = Stack.Underflow.class) public void whenemptystackispopped_shouldthrowunderflow() throws Exception { stack.pop(); (expected = Stack.Empty.class) public void whenstackisempty_topthrowsempty() throws Exception { stack.top(); (expected = Stack.Empty.class) public void withzerocapacitystack_topthrowsempty() throws Exception { stack = Stack.make(0); stack.top(); public void givenstackwithnotwo_findtwoshouldreturnnull() throws Exception { assertnull(stack.find(2)); public void afteronepush_stacksizeshouldbeone() throws Exception { assertfalse(stack.isempty()); assertequals(1, stack.getsize()); public void whenoneispushed_oneisontop() throws Exception { assertequals(1, stack.top()); public void whenoneispushed_oneispopped() throws Exception { assertequals(1, stack.pop()); public void afteronepushandonepop_shouldbeempty() throws Exception { stack.pop(); asserttrue(stack.isempty()); assertequals(0, stack.getsize()); public void whenoneandtwoarepushed_twoandonearepopped() throws Exception { stack.push(2); assertequals(2, stack.pop()); assertequals(1, stack.pop()); public void givenstackwithonetwopushed_findoneandtwo() throws Exception { stack.push(2); int oneindex = stack.find(1); int twoindex = stack.find(2); assertequals(1, oneindex); assertequals(0, twoindex); (expected = Stack.Overflow.class) public void whenpushedpastlimit_shouldthrowoverflow() throws Exception { 16.10.2014 2

Aus dem Alltag eines Entwicklers Ein typischer (Unit-) Test à Kurze Analyse: Übersichtliche Tests Sehr gute Lesbarkeit Gutes Naming Klar und verständlich à Alles super!? public void whenoneispushed_oneisontop() throws Exception { assertequals(1, stack.top()); public void whenoneispushed_oneispopped() throws Exception { assertequals(1, stack.pop()); public void afteronepushandonepop_shouldbeempty() throws Exception stack.pop(); asserttrue(stack.isempty()); assertequals(0, stack.getsize()); public void whenoneandtwoarepushed_twoandonearepopped() throws Exce stack.push(2); assertequals(2, stack.pop()); assertequals(1, stack.pop()); public void givenstackwithonetwopushed_findoneandtwo() throws Excep stack.push(2); int oneindex = stack.find(1); int twoindex = stack.find(2); 16.10.2014 3

Aus dem Alltag eines Entwicklers Ein typischer (Unit-) Test à Was sagt der Bauch? Redundanz im Test-Setup Redundanz im Naming Naming nicht eindeutig à Gibt es eine Lösung? Test-Setup Helper? Test-Object Builder? Code-Reviews einführen? public void whenoneispushed_oneisontop() throws Exception { assertequals(1, stack.top()); public void whenoneispushed_oneispopped() throws Exception { assertequals(1, stack.pop()); public void afteronepushandonepop_shouldbeempty() throws Exception stack.pop(); asserttrue(stack.isempty()); assertequals(0, stack.getsize()); public void whenoneandtwoarepushed_twoandonearepopped() throws Exce stack.push(2); assertequals(2, stack.pop()); assertequals(1, stack.pop()); public void givenstackwithonetwopushed_findoneandtwo() throws Excep stack.push(2); int oneindex = stack.find(1); int twoindex = stack.find(2); 16.10.2014 4

Vorstellungsrunde Wer bin ich...? Stefan Bechtold. Principal Software Engineer. Namics GmbH, Frankfurt E-Mail: stefan.bechtold@namics.com Twitter: @bechte Querdenker. Zielstrebig. Herzblut. Java. TDD. Commerce. Berufserfahrung 11 Jahre bei Namics seit 2006 Berufliche Aktivitäten bei Namics: - Java Commerce- und Content-Management-Systeme - Coach für Themen rund um: TDD, Clean Code, Software Architecture & Design Aktivitäten in der Open-Source-Community: - Entwicklung des HierarchicalContextRunner - JUnit-Framework Committer 16.10.2014 5

Vorstellungsrunde Worum geht s im Vortrag...? à Motivation für sauber strukturierte (Unit-) Tests à JUnit HierarchicalContextRunner Einführung Funktionsweise Limitierungen à Showcase / Code Samples 16.10.2014 6

Vorstellungsrunde Und wer hört eigentlich zu? Mockito? JUnit? TestNG? Hamcrest? Andere? à Welche Frameworks nutzt Ihr für (Unit-) Tests in Java? 16.10.2014 7

Vorstellungsrunde Und wer hört eigentlich zu? Isolation-Tests ein JUnit Runner Nie gehört! Finger weg!? à Was fällt Dir ein bei: @RunWith(Enclosed.class)? 16.10.2014 8

Vorstellungsrunde Und wer hört eigentlich zu? Nie gehört! Schon mal gesehen... Ja, nutze ich schon aktiv im Projekt!? à Kennst Du den JUnit HierarchicalContextRunner schon? 16.10.2014 9

16.10.2014 10

Sauber strukturierte (Unit-) Tests 5 Grundregeln Behandle Test-Code wie Produktiv-Code Robert Martin Nicht deterministische Tests gehören gelöscht! Martin Fowler Test-Pattern, z.b.: Arrange, Act, Assert Gerard Meszaros Anzahl Zeit Minimiere UI Test-Double Lebe damit ;-) Dummy Optimiere Integration Fake Optimiere Stub Spy Maximiere Unit Minimiere Mock Test-Pyramide einhalten 16.10.2014 11 Verwendung der richtigen Test-Doubles

Sauber strukturierte (Unit-) Tests Die Grundregeln #1 Behandle Test-Code wie Produktiv-Code à Die Tests sind die Spezifikation des Systems à Fehlgeschlagende Tests müssen Feedback geben à Lesbarkeit der Tests ist das höchste Gut! à Clean Code: A Handbook of Agile Software Crafsmanship Robert Martin, http://cleancoders.com 16.10.2014 12

Sauber strukturierte (Unit-) Tests Die Grundregeln #2 Verwende Test Pattern für bessere Lesbarkeit à Pattern verbessern auch den Test Code ;-) à Zusätzliche Pattern speziell für Tests: Arrange, Act, Assert (the 3-As) Given, When, Then viele weitere à XUnit Test Patterns, Refactoring Test Code Gerard Meszaros, http://xunitpatterns.com 16.10.2014 13

Sauber strukturierte (Unit-) Tests Die Grundregeln #3 Vermeide unzuverlässige Tests à (Unit-) Tests müssen deterministisch sein! à Nachteile nicht-deterministischer Tests: Unerwünschte und unvorhersehbare Fehler in Tests Seiteneffekte, die ganze Test-Suites zerstören können Verlust des Vertrauens in die Test-Suite à Indeed you really ought to throw a non-deterministic test away, since if you don t it has an infectious quality. Martin Fowler, http://martinfowler.com/articles/nondeterminism.html 16.10.2014 14

Sauber strukturierte (Unit-) Tests Die Grundregeln #4 Teste im angemessenen Level (Test-Pyramide) Anzahl Zeit Minimiere UI Lebe damit ;-) Optimiere Integration Optimiere Maximiere Unit Minimiere 16.10.2014 15

Sauber strukturierte (Unit-) Tests Die Grundregeln #5 Verwende (die richtigen) Test-Doubles à Einsatz von Mocking Frameworks: Niemals für: Dummy, Stub & Spy Test-Double Manchmal sinnvoll für: Mock / Fake Dummy Fake Dummy Stub Spy Mock Fake Stub Test-Daten Nein Ja Ja Ja Ja Inspektion Nein Nein Ja Ja Ja Verifikation Nein Nein Nein Ja Ja Echte Logik Nein Nein Nein Nein Ja Spy Mock 16.10.2014 16

16.10.2014 17

JUnit - HierarchicalContextRunner Ein typischer (Unit-) Test à Was sagt der Bauch? Redundanz im Test-Setup Redundanz im Naming Naming nicht eindeutig à Und die Lösung? public void whenoneispushed_oneisontop() throws Exception { assertequals(1, stack.top()); public void whenoneispushed_oneispopped() throws Exception { assertequals(1, stack.pop()); public void afteronepushandonepop_shouldbeempty() throws Exception stack.pop(); asserttrue(stack.isempty()); assertequals(0, stack.getsize()); public void whenoneandtwoarepushed_twoandonearepopped() throws Exce stack.push(2); assertequals(2, stack.pop()); assertequals(1, stack.pop()); public void givenstackwithonetwopushed_findoneandtwo() throws Excep stack.push(2); int oneindex = stack.find(1); int twoindex = stack.find(2); 16.10.2014 18

JUnit - HierarchicalContextRunner Die Outline der Testklasse whencreatingastackwithnegativesize_shouldthrowillegalcapacity whencreatingstackwithzerocapacity_anypushshouldoverflow newlycreatedstack_shouldbeempty whenemptystackispopped_shouldthrowunderflow whenstackisempty_topthrowsempty withzerocapacitystack_topthrowsempty givenstackwithnotwo_findtwoshouldreturnnull afteronepush_stacksizeshouldbeone whenoneispushed_oneisontop whenoneispushed_oneispopped afteronepushandonepop_shouldbeempty whenoneandtwoarepushed_twoandonearepopped givenstackwithonetwopushed_findoneandtwo whenpushedpastlimit_shouldthrowoverflow 16.10.2014 19

JUnit - HierarchicalContextRunner Die Outline der Testklasse whencreatingastackwithnegativesize_shouldthrowillegalcapacity whencreatingstackwithzerocapacity_anypushshouldoverflow withzerocapacitystack_topthrowsempty newlycreatedstack_shouldbeempty whenemptystackispopped_shouldthrowunderflow whenstackisempty_topthrowsempty givenstackwithnotwo_findtwoshouldreturnnull afteronepush_stacksizeshouldbeone whenoneispushed_oneisontop whenoneispushed_oneispopped afteronepushandonepop_shouldbeempty whenoneandtwoarepushed_twoandonearepopped givenstackwithonetwopushed_findoneandtwo whenpushedpastlimit_shouldthrowoverflow 16.10.2014 20

JUnit - HierarchicalContextRunner Die Outline der Testklasse whencreatingastackwithnegativesize_shouldthrowillegalcapacity GivenStackWithZeroCapacity anypushshouldoverflow topthrowsempty newlycreatedstack_shouldbeempty whenemptystackispopped_shouldthrowunderflow whenstackisempty_topthrowsempty givenstackwithnotwo_findtwoshouldreturnnull afteronepush_stacksizeshouldbeone whenoneispushed_oneisontop whenoneispushed_oneispopped afteronepushandonepop_shouldbeempty whenoneandtwoarepushed_twoandonearepopped givenstackwithonetwopushed_findoneandtwo whenpushedpastlimit_shouldthrowoverflow 16.10.2014 21

JUnit - HierarchicalContextRunner Die Outline der Testklasse whencreatingastackwithnegativesize_shouldthrowillegalcapacity GivenStackWithZeroCapacity anypushshouldoverflow topthrowsempty GivenEmptyStack shouldbeempty popshouldthrowunderflow topthrowsempty findtwoshouldreturnnull afteronepush_stacksizeshouldbeone whenoneispushed_oneisontop whenoneispushed_oneispopped afteronepushandonepop_shouldbeempty whenoneandtwoarepushed_twoandonearepopped givenstackwithonetwopushed_findoneandtwo whenpushedpastlimit_shouldthrowoverflow 16.10.2014 22

JUnit - HierarchicalContextRunner Die Outline der Testklasse whencreatingastackwithnegativesize_shouldthrowillegalcapacity GivenStackWithZeroCapacity anypushshouldoverflow topthrowsempty GivenEmptyStack shouldbeempty popshouldthrowunderflow topthrowsempty findtwoshouldreturnnull GivenOnePushed stacksizeshouldbeone oneisontop oneispopped stackshouldbeemptyafterpop whenoneandtwoarepushed_twoandonearepopped givenstackwithonetwopushed_findoneandtwo whenpushedpastlimit_shouldthrowoverflow 16.10.2014 23

JUnit - HierarchicalContextRunner Die Outline der Testklasse whencreatingastackwithnegativesize_shouldthrowillegalcapacity GivenStackWithZeroCapacity anypushshouldoverflow topthrowsempty GivenEmptyStack shouldbeempty popshouldthrowunderflow topthrowsempty findtwoshouldreturnnull GivenOnePushed stacksizeshouldbeone oneisontop GivenOnePop oneispopped stackshouldbeemptyafterpop GivenTwoPushed twoandonearepopped findoneandtwo anotherpushshouldthrowoverflow 16.10.2014 24

JUnit - HierarchicalContextRunner Erkenntnisse à Beobachtungen: (Unit-) Tests sind hierarchisch abbildbar Einzelne Tests können gruppiert werden Gültigkeit & Sichtbarkeit von Fixtures Keine Redundanz & unnötigen Fixtures Leider keine Unterstützung in JUnit L à Anforderungen: (Einfache) Definition eines Kontekt notwendig SetUp / TearDown je Hierarchie-Stufe benötigt 16.10.2014 25

JUnit - HierarchicalContextRunner JUnit - HierarchicalContextRunner à Basiert vollständig auf JUnit Wiederverwendung der Annotations (, @Ignore, etc.) Formulierung der (Unit-) Tests unverändert JUnit Core Features direkt einsetzbar Bestehende Test Suites sofort ausführbar à Zusätzliche Funktionen: Erlaubt die Erstellung von Kontexten Kontexte können verschachtelt werden Erlaubt SetUp / TearDown in jedem Kontext 16.10.2014 26

JUnit - HierarchicalContextRunner JUnit - HierarchicalContextRunner à Erstellung eines Kontext 16.10.2014 27

JUnit - HierarchicalContextRunner JUnit - HierarchicalContextRunner à Verschachtelung von Kontexten 16.10.2014 28

JUnit - HierarchicalContextRunner Ein typischer (Unit-) Test revisited @RunWith(HierarchicalContextRunner.class) public class StackTest { private Stack stack; (expected = Stack.IllegalCapacity.class) public void whencreatingastackwithnegativesize_shouldthrowillegalcapacity() throws Exception { Stack.make(-1); public class ZeroSizeStackContext { @Before public void setup() throws Exception { stack = Stack.make(0); (expected = Stack.Overflow.class) public void anypushshouldoverflow() throws Exception { (expected = Stack.Empty.class) public void topshouldthrowempty() throws Exception { stack.top(); public class GivenNewStack { @Before public void setup() throws Exception { stack = Stack.make(2); public void shouldbeempty() throws Exception { asserttrue(stack.isempty()); assertequals(0, stack.getsize()); (expected = Stack.Underflow.class) public void popshouldthrowunderflow() throws Exception { stack.pop(); (expected = Stack.Empty.class) public void topshouldthrowempty() throws Exception { stack.top(); public void findtwoshouldreturnnull() throws Exception { assertnull(stack.find(2)); public class GivenOnePushed { @Before public void pushone() { assertequals(1, stack.getsize()); public void oneisontop() throws Exception { assertequals(1, stack.top()); public class GivenOnePopped { private int poppedelement; @Before public void popone() { poppedelement = stack.pop(); public void oneispopped() throws Exception { assertequals(1, poppedelement); public void stackshouldbeempty() throws Exception { asserttrue(stack.isempty()); assertequals(0, stack.getsize()); public class GivenTwoPushed { @Before public void pushtwo() { stack.push(2); public void givenstackwithonetwopushed_findoneandtwo() throws Exception { int oneindex = stack.find(1); int twoindex = stack.find(2); assertequals(1, oneindex); assertequals(0, twoindex); public void twoandonearepopped() throws Exception { assertequals(2, stack.pop()); assertequals(1, stack.pop()); (expected = Stack.Overflow.class) public void anotherpushshouldthrowoverflow() throws Exception { public void stacksizeshouldbeone() throws Exception { assertfalse(stack.isempty()); 16.10.2014 29

JUnit - HierarchicalContextRunner Funktionsweise à Evaluieren Test-Klasse Runner führt @BeforeClass aus Runner evaluiert alle Tests der Klasse Runner ruft sich rekursive für alle Kontexte auf Runner führt @AfterClass aus à Evaluierung Test-Methode Runner erzeugt Test-Objekt (top-down) Runner führt @Before aus (top-down) Runner startet die Test-Methode Runner führt @After aus (bottom-up) 16.10.2014 30

JUnit - HierarchicalContextRunner Limitierungen à Allgemeine Limitierungen Keine statischen Klassen innerhalb eines Kontexts Keine statischen Methoden innerhalb eines Kontexts Ausführung einzelner Test- Methoden (noch) nicht möglich à JUnit Limitierungen Support (erst) ab Version JUnit 4.11 Operiert nicht mit anderen JUnit-Runner zusammen Beschreibung im Ergebnis (noch) nicht optimal 16.10.2014 31

JUnit - HierarchicalContextRunner Weitere Literatur github Repository HierarchicalContextRunner Clean Coders Screencasts CleanCode Episodes: 20, 21 JavaCaseStudy Episodes: 3, 4 16.10.2014 32

16.10.2014 33

JUnit. HierarchicalContextRunner. Mehr Struktur. TDD. Clean Code. Verantwortung. Skills. Stefan Bechtold. Principal Software Engineer. E-Mail: stefan.bechtold@namics.com Twitter: @bechte