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]
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]
| 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.
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
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
| 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.
| 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.
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.
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“.
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.
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.
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.
| 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.
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.
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