Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Spock.Code.Week

 Spock.Code.Week

Vorstellung des Testframeworks Spock auf der code.week 2015, eine Folgeveranstaltung von code.talks.

Markus Hanses

October 01, 2015
Tweet

More Decks by Markus Hanses

Other Decks in Programming

Transcript

  1. Agenda © msg | Oktober 2015 | Spock.Code.Week 2 • 

    Vorstellungsrunde / Bisherige Erfahrungen •  Einführung -  Spock Einführung -  Coding Dojo -  Test-Driven Development -  Spock in der Praxis •  Coding Dojo - Spock in der Praxis -  Live Coding – FizzBuzz -  Code Kata – StringCalculator •  Coding Dojo - Weiterführende Beispiele -  Live Coding -  Code Kata – StringCalculator •  Coding Dojo - Stubs & Mocks -  Live Coding - FizzBuzz -  Code Kata – StringCalculator •  Live Coding - Geb •  Feedback
  2. Was genau ist Spock? © msg | Oktober 2015 |

    Spock.Code.Week 5 •  Spock: „Specification and Mock“ •  Version 1.0 seit Frühling 2015 •  Testframework basierend auf Groovy •  Testet sowohl Groovy als auch Java-Code •  Vollständig kompatibel mit JUnit (eigener JUnit Testrunner Sputnik) •  Aussagekräftigere und strukturierte Tests „I have been, and always shall be, your friendly testing framework“ [Ken Kousen]
  3. 6 Der Umfang von Spock © msg | Oktober 2015

    | Spock.Code.Week Spock JUnit Mockito / Jmock / EasyMock Cucumber / JBehave Hamcrest Matcher
  4. Java 7 Spock ist vollständig kompatibel zu JUnit © msg

    | Oktober 2015 | Spock.Code.Week Spock Spock JUnit JUnit Java Java
  5. Bewusste Praxis © msg | Oktober 2015 | Spock.Code.Week 9

    Deliberate Practice - das planvolle und zielgerichtete Üben - ist eine Möglichkeit um methodisch abgestimmt auf bestimmte Höchstleitungen hin zu trainieren. Dabei wird ein überdurchschnittlich hohes Niveau auf einem stark eingegrenzten und spezialisierten Gebiet angestrebt. (nach Ericsson, The role of deliberate practice in the acquisition of expert performance, 1993) [Academia.edu] “But what changes people is what they do, not what they read. How many diet books have I read? Am I thinner?” [Jeffries2005]
  6. Was ist eine Kata? © msg | Oktober 2015 |

    Spock.Code.Week 10 •  In den Kampfkünsten ist es eine genau festgelegte Abfolge von Bewegungen wie Angriffe, Verteidigungen und Gegenangriffe. [Bild01]
  7. Was ist eine Coding Kata? © msg | Oktober 2015

    | Spock.Code.Week 11 •  In der Programmierung bezeichnet eine Kata eine kleine abgeschlossene Übung zur Verbesserung der Fertigkeiten eines Programmierers. •  Eine solche Code-Kata stellt ein Problem, welches von dem Programmierer gelöst werden soll. •  Der programmierte Code zur Lösung des Problems ist nur ein Teil der Übung.
  8. Traditional Test-Driven Development © msg | Oktober 2015 | Spock.Code.Week

    13 RED Testmethode erstellen Erwartungen definieren REFACTOR Code Smell entfernen Keine neue Funktion! GREEN Funktion realisieren Einfache Lösung!
  9. [Westphal2014] Informed Test-Driven Development © msg | Oktober 2015 |

    Spock.Code.Week 14 RED Testmethode erstellen Erwartungen definieren REFACTOR Code Smell entfernen Keine neue Funktion! Testliste erweitern GREEN Funktion realisieren Einfache Lösung! OVERVIEW Überblick verschaffen Testliste erstellen Triangulation
  10. Typische Struktur von Tests © msg | Oktober 2015 |

    Spock.Code.Week 16 import static org.junit.Assert.assertTrue; import org.junit.Test; public class WorkshopTests { @Test public void coolGuysShouldLearnSpock { CoolGuys coolGuys = new CoolGuys(); Teachers teachers = new Teachers(); teachers.tryToExplainSpock(); coolGuys.happyCoding(); assertTrue(coolGuys.SpockKnowlege > 80) } } Test Class Test Method Context Stimulus Expectation
  11. Spock Specification (given à when à then) © msg |

    Oktober 2015 | Spock.Code.Week 17 import spock.lang.Specification class WorkshopSpec extends Specification { def "some cool guys are pros in Spock this evening"() { given: "some cool guys and some teachers (also cool)" def coolGuys = new CoolGuys() def teachers = new Teachers() when: "cool guys try the features Spock provides" teachers.tryToExplainSpock() coolGuys.happyCoding() then: "cool guys know a lot about Spock" coolGuys.SpockKnowlege > 80 } } Specification Feature Context Stimulus Expectation
  12. Live Coding - FizzBuzz (1) © msg | Oktober 2015

    | Spock.Code.Week 19 •  Stellt Euch vor Ihr seit Schüler im Mathematik-Unterricht und der Lehrer teilt Euch mit, in der nächsten Unterrichtsstunde ein neues Spiel zu spielen, um den Unterricht etwas aufzulockern. •  Er erläutert das Spiel wie folgt: „Ich werde Einen nach dem Anderen aufrufen und bitten die als nächstes folgende Zahl zu sagen, beginnend mit der Zahl 1.“ •  „Der lustige Teil dieses Spiels ist folgender: Wenn die Zahl durch 3 teilbar ist, soll Fizz anstelle der Zahl gesagt werden. Wenn die Zahl durch 5 teilbar ist, soll anstelle der Zahl Buzz gesagt werden.“ •  Um nicht Gefahr zu laufen vor der gesamten Klasse eine falsche Antwort zu geben, habt Ihr Euch entschlossen bis zur nächsten Unterrichtsstunde ein Programm zu schreiben, welches Euch die richtigen Antworten liefert.
  13. Live Coding - FizzBuzz (2) © msg | Oktober 2015

    | Spock.Code.Week 20 •  Die Unterrichtsstunde verlief gut und der Lehrer ist so zufrieden mit der Klasse, dass er beschließt, dieses Spiel weiter zu führen. •  Er führt folgende Erweiterung ein: „Wenn die Zahl durch 3 und durch 5 teilbar ist, soll FizzBuzz anstelle der Zahl gesagt werden.“ •  Wieder möchtest Du vor der Klasse glänzen und erweiterst Dein Programm.
  14. Code Kata - String Calculator (1) © msg | Oktober

    2015 | Spock.Code.Week 22 •  Erstellt eine StringCalculator Klasse mit der Methode int add(String numbers). •  Diese Methode soll Zahlen wie 0,1 oder 2 entgegen nehmen und die Summe dieser Zahlen zurückgeben. Für einen leeren String, wird eine 0 zurückgegeben. •  Die Zahlen sind durch Kommas voneinander getrennt. •  Beispiel möglicher Eingaben: „“, „1“ oder „1,2“ •  Beginnt mit dem einfachsten Testfall, mit einem leeren String und macht dann mit einer und anschließend mit zwei Zahlen weiter. •  Denkt daran so einfache Lösungen wie möglich zu implementieren, damit Ihr Euch auf die Tests konzentrieren könnt. •  Denkt daran, nach jedem erfolgreichen Test zu refaktorieren.
  15. Code Kata - String Calculator (2) © msg | Oktober

    2015 | Spock.Code.Week 23 •  Ermöglicht es der add-Methode eine „unbegrenzte“ Anzahl von Zahlen zu verarbeiten.
  16. Code Kata - String Calculator (3) © msg | Oktober

    2015 | Spock.Code.Week 24 •  Ermöglicht es der add-Methode Zahlen zu verarbeiten, die durch einen Zeilenumbruch voneinander getrennt sind, anstelle eines Kommas. •  Die folgende Eingabe ist gültig: „1\n2,3“. Das Ergebnis ist 6. •  Die folgende Eingabe ist ungültig und muss auch nicht behandelt werden: „1,\n“.
  17. Code Kata - String Calculator (4) © msg | Oktober

    2015 | Spock.Code.Week 25 •  Unterstützt eine beliebige Zeichenfolge als Trenner zwischen den Zahlen. •  Um einen Trenner in der Eingabe zu definieren, wird am Anfang der Eingabe eine extra Zeile mitgegeben. „//[Trenner]\n[Zahlen]“ •  Beispiel einer gültigen Eingabe: „//;\n1;2“. Diese Eingabe gibt 3 zurück und verwendet „;“ als Trenner. •  Diese erste Zeile ist optional. Die bisherigen Eingaben müssen weiter unterstützt werden.
  18. Code Kata - String Calculator (5) © msg | Oktober

    2015 | Spock.Code.Week 28 •  Die Methode mit einer negativen Zahl aufzurufen, führt zu einer Exception mit der Nachricht „negatives not allowed“. •  •  Zusätzlich wird die negative Zahl in der Meldung angegeben. Sollten mehrere Zahlen der Eingabe negativ sein, werden alle negativen Zahlen in der Nachricht ausgegeben.
  19. Code Kata - String Calculator (6) © msg | Oktober

    2015 | Spock.Code.Week 29 •  Nummer größer als 1000 sollten ignoriert werden. •  Beispiel einer Eingabe: „2,1001“. Die Ausgabe ist 2.
  20. Code Kata - FizzBuzz © msg | Oktober 2015 |

    Spock.Code.Week 31 •  Der Lehrer ist begeistert und möchte gerne eine weitere Variante einführen. •  „Wenn die Zahl durch 7 teilbar ist, soll Whizz anstelle der Zahl gesagt werden.“ •  Wieder erweitert Ihr Euer Programm.
  21. Code Kata - String Calculator © msg | Oktober 2015

    | Spock.Code.Week 33 •  Der StringCalculator soll Strings nach bisher festgelegten Formaten von einem Stack lesen können. Dieser Stack liegt liegt in einer anderen Komponente, von deren Implementierung man sich im Test nicht abhängig machen möchte. •  •  Schreibt einen Stub, um einen validen Rückgabewert zu bekommen, der dann an die bereits bestehende Methode add(String) weitergegeben wird und überprüft das Resultat. •  •  Den Stack/Stub könnt Ihr im Test über einen Setter im StringCalculator setzen.
  22. Code Kata - String Calculator (8) © msg | Oktober

    2015 | Spock.Code.Week 34 •  Über ein weiteres Interface soll es dem StringCalculator möglich sein ein „easter egg“ aufzurufen. Diese Methode soll aufgerufen werden, sobald die Zahl „1234“ im zu berechnenden String erscheint. •  Die „easter egg“ Funktionalität wird von einem anderen Team realisiert und Ihr müsst nun sicherstellen, dass diese bei der richtigen Eingabe aufgerufen wird. •  Löst diese Aufgabe durch den Einsatz eines Mocks.
  23. .consulting .solutions .partnership Markus Hanses Senior IT Consultant +49 (0)

    173 / 6172920 [email protected] Kai Schmidt Lead IT Consultant +49 (0) 173 / 7924973 [email protected] msg systems ag (Headquarters) Robert-Buerkle-Str. 1, 85737 Ismaning Germany www.msg-systems.com
  24. Bibliografie © msg | Oktober 2015 | Spock.Code.Week 38 [Academia.edu]

    Deliberate practice als einziger Schlüssel zum Erwerb musikalischer Expertise? https://www.academia.edu/ [Jeffries2005] Practice: That‘s What We Do http://xprogramming.com/articles/jatpractice/ [Westphal2014] Ralf Westpfahl, Informed Test-Driven Development http://leanpub.com/informedTDD [Spock] Offizielle Referenz von Spock http://docs.spockframework.org [Kapelonis] Konstantinos Kapelonis,Java Testing with Spock, Manning MEAP, Version 6 2015 [Fletcher] RobFletcher, Spock Up & Running, O‘Reilly 2016
  25. Verzeichnis der Bildquellen © msg | Oktober 2015 | Spock.Code.Week

    39 [Bild01] http://kbl.bplaced.net/images/karate-Dateien/kata/0-Kata-Heian-Shodan.jpg