Spock and AsciiDoc - ein perfektes Paar

Spock and AsciiDoc - ein perfektes Paar

want to give feedback? => https://rdmueller.github.io/feedback

JUG Saxony Day, Radebeul, 13.09.2019,
https://spockasciidocreports.netlify.com/spock-reports.html
https://github.com/docToolchain/SpockAsciiDocReports
https://docs-as-co.de
https://dbsystel.de

Der Vortrag zeigt, wie Sie mit dem Spock Test-Framework (http://spockframework.org/) leserliche, automatisierte Tests schreiben und anschließend einen Report in AsciiDoc generieren. Dadurch ergeben sich neue Möglichkeiten. Die ausgeführten Test werden nicht nur für den Kunden verständlich dokumentiert (und das in verschiedenen Formaten wie HTML und PDF), Sie können nun auch dokumentations-getrieben entwickeln - erst die Software in einem Dokument mit eingestreuten Tests beschreiben, dann entwickeln und die Testergebnisse in der Softwarebeschreibung wieder anzeigen. Oder wie wäre es, wenn Ihr Benutzerhandbuch durch automatisierte Tests gleich mit aktuellen Screenshots versorgt wird?

Cc5f3bf8b3cb91c985ed4fd046aa451d?s=128

Ralf D. Müller

September 13, 2019
Tweet

Transcript

  1. ein perfektes Paar DB Systel GmbH | Ralf D. Müller,

    (Christian Fischer) Spock und AsciiDoc + =
  2. Ralf D. Müller Software Architect @ DB Systel mit Schwerpunkt

    Web-Technologien Qualität (Security, Testautomation) Produktivität (Gradle, Groovy, Grails) Prozessoptimierung In der Freizeit Geek, arc42 Contributor & Maintainer von docToolchain DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 2
  3. 3 DB Systel GmbH | @RalfDMueller | JUG Saxony Day

    | 13.09.2019 Digital | bewegen | verstehen | anwenden | begleiten | vernetzen | denken und handeln DB Systel. Digital bewegen. Gemeinsam.
  4. Was ist Spock? DB Systel GmbH | @RalfDMueller | JUG

    Saxony Day | 13.09.2019 4 Leonard Brüning
  5. Was ist Spock? DB Systel GmbH | @RalfDMueller | JUG

    Saxony Day | 13.09.2019 5 void testeAdditionJUnit() { Calculator calculator = new Calculator() BigDecimal result = calculator.plus( 3, 4) assertEquals(7, result, 0.1) }
  6. Was ist Spock? DB Systel GmbH | @RalfDMueller | JUG

    Saxony Day | 13.09.2019 6 void "Rechner kann addieren Spock I"() { given: Calculator calculator = new Calculator() when: BigDecimal result = calculator.plus( 3, 4) then: assertEquals(7, result, 0.1) }
  7. Was ist Spock? DB Systel GmbH | @RalfDMueller | JUG

    Saxony Day | 13.09.2019 7 void "Rechner kann addieren Spock II"() { given: "ein Caclulator Objekt" Calculator calculator = new Calculator() when: "zwei Zahlen addiert werden" BigDecimal result = calculator.plus( 3, 4) then: "erhalte ich das richtige Ergebnis" assertEquals(7, result, 0.1) }
  8. Was ist Spock? DB Systel GmbH | @RalfDMueller | JUG

    Saxony Day | 13.09.2019 8 void "Rechner kann addieren Spock III"() { given: "ein Caclulator Objekt" Calculator calculator = new Calculator() when: "#a und #b addiert werden" BigDecimal result = calculator.plus( a, b) then: "erhalte ich #expected" assertEquals(expected, result, 0.1) where: "Beispieldaten" a | b || expected 3 | 4 || 7 4 | 3 || 7 -5 | 7 || 2 -7 | 5 || -2 }
  9. Was ist Spock? DB Systel GmbH | @RalfDMueller | JUG

    Saxony Day | 13.09.2019 9 void "Rechner kann addieren Spock IV"() { given: "ein Caclulator Objekt" def calculator = new Calculator() when: "#a und #b addiert werden" def result = calculator.plus( a, b) then: "erhalte ich #expected" result == expected where: "Beispieldaten" a | b || expected 3 | 4 || 7 4 | 3 || 7 -5 | 7 || 2 -7 | 5 || -2 }
  10. Was ist AsciiDoc? DB Systel GmbH | @RalfDMueller | JUG

    Saxony Day | 13.09.2019 10
  11. Was ist AsciiDoc? DB Systel GmbH | @RalfDMueller | JUG

    Saxony Day | 13.09.2019 11 = AsciiDoc *AsciiDoc* ist ein Dokumentationsformat, welches mit Hilfe des Tools *Asciidoctor* in verschiedene andere Formate wie z.B. HTML gewandelt werden kann. AsciiDoc hat den Vorteil, dass man es einfach wie eine eMail schreiben kann und sich wie Sourceode versionieren lässt. Sie auch https://asciidoctor.org[asciidoctor.org] AsciiDoc AsciiDoc ist ein Dokumentationsformat, welches mit Hilfe des Tools Asciidoctor in verschiedene andere Formate wie z.B. HTML gewandelt werden kann. AsciiDoc hat den Vorteil, dass man es einfach wie eine eMail schreiben kann und sich wie Sourceode versionieren lässt. Sie auch asciidoctor.org
  12. AsciiDoc – Special Features: Includes DB Systel GmbH | @RalfDMueller

    | JUG Saxony Day | 13.09.2019 12
  13. AsciiDoc – Special Features: Tabellen DB Systel GmbH | @RalfDMueller

    | JUG Saxony Day | 13.09.2019 13
  14. AsciiDoc – Special Features: Diagramme DB Systel GmbH | @RalfDMueller

    | JUG Saxony Day | 13.09.2019 14
  15. ? DB Systel GmbH | @RalfDMueller | JUG Saxony Day

    | 13.09.2019 15
  16. Nochmal ein Blick auf Spock… DB Systel GmbH | @RalfDMueller

    | JUG Saxony Day | 13.09.2019 16 void "Rechner kann addieren Spock IV"() { given: "ein Caclulator Objekt" def calculator = new Calculator() when: "#a und #b addiert werden" def result = calculator.plus( a, b) then: "erhalte ich #expected" result == expected where: "Beispieldaten" a | b || expected 3 | 4 || 7 4 | 3 || 7 -5 | 7 || 2 -7 | 5 || -2 }
  17. Was liefern die Tests als Ausgabe? DB Systel GmbH |

    @RalfDMueller | JUG Saxony Day | 13.09.2019 17
  18. Was liefern die Tests als Ausgabe? DB Systel GmbH |

    @RalfDMueller | JUG Saxony Day | 13.09.2019 18
  19. Was liefern die Tests als Ausgabe? DB Systel GmbH |

    @RalfDMueller | JUG Saxony Day | 13.09.2019 19
  20. Was liefern die Tests als Ausgabe? DB Systel GmbH |

    @RalfDMueller | JUG Saxony Day | 13.09.2019 20
  21. Was liefern die Tests als Ausgabe? DB Systel GmbH |

    @RalfDMueller | JUG Saxony Day | 13.09.2019 21 Tilman Ginzel
  22. Was liefern die Tests als Ausgabe? DB Systel GmbH |

    @RalfDMueller | JUG Saxony Day | 13.09.2019 22
  23. Was liefern die Tests als Ausgabe? DB Systel GmbH |

    @RalfDMueller | JUG Saxony Day | 13.09.2019 23
  24. Was können wir jetzt damit machen? DB Systel GmbH |

    @RalfDMueller | JUG Saxony Day | 13.09.2019 24
  25. Was können wir jetzt damit machen? DB Systel GmbH |

    @RalfDMueller | JUG Saxony Day | 13.09.2019 25 = Spezifikation :pathToSpec: ../../build/spock-reports/ :numbered: Dieses Projekt soll den Benutzer durch zusätzliche Features länger auf der Suchseite halten um höhere Werbeinnahmen zu generieren. == Story: Taschenrechner Als Benutzer möchte ich bei Eingabe des Suchbegriffs "Rechner" oder bei der Eingabe einer Mathematischen Rechnung einen Taschenrechner als Web-Anwendung angezeigt bekommen, so daß ich nicht die Suche Verlassen muss === Akzeptanztest include::{pathToSpec}demo.WebCalcSpec.adoc[tag=Bing- Rechner_aufrufen]
  26. Was können wir jetzt damit machen? DB Systel GmbH |

    @RalfDMueller | JUG Saxony Day | 13.09.2019 26
  27. Was haben wir erreicht? DB Systel GmbH | @RalfDMueller |

    JUG Saxony Day | 13.09.2019 27 Anwendung Tests Test- Report Spec
  28. Was haben wir erreicht? Was wollen wir erreichen? DB Systel

    GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 28 Anwendung Tests Test- Report Spec
  29. Was wollen wir erreichen? DB Systel GmbH | @RalfDMueller |

    JUG Saxony Day | 13.09.2019 Feature-Spec (draft) implementierte Tests Acceptance-Test (Ziel) Test-Gerüst
  30. Was wollen wir erreichen? DB Systel GmbH | @RalfDMueller |

    JUG Saxony Day | 13.09.2019 Acceptance-Test (Ziel) Test-Gerüst implementierte Tests Unvollständige Test-Liste Test schreiben Test begrünen refactor Tests ergänzen
  31. Was wollen wir erreichen? DB Systel GmbH | @RalfDMueller |

    JUG Saxony Day | 13.09.2019 Feature-Spec (draft) implementierte Features getestete Spec (final) Acceptance Test(s) (final) implementierte Tests Acceptance-Test (Ziel) Test-Gerüst selektierte Tests
  32. Also schreiben wir eine Spezifikation… DB Systel GmbH | @RalfDMueller

    | JUG Saxony Day | 13.09.2019 32 = Spezifikation include::config.adoc[] Dieses Projekt soll den Benutzer durch zusätzliche Features länger auf der Suchseite halten um höhere Werbeinnahmen zu generieren. == Story: Taschenrechner Als Benutzer möchte ich bei Eingabe des Suchbegriffs "Rechner" oder bei der Eingabe einer Mathematischen Rechnung einen Taschenrechner als Web-Anwendung angezeigt bekommen, so daß ich nicht die Suche Verlassen muss === Acceptancetests ==== User calls Calculator [cols="1,10"] |=== | Given | User is on the main page | When | User enters 'calc' as search-term and submits the form | Then | the search result displays a calculator |===
  33. …welche durch das einfache Format maschinenlesbar ist DB Systel GmbH

    | @RalfDMueller | JUG Saxony Day | 13.09.2019 33 = Spezifikation include::config.adoc[] Dieses Projekt soll den Benutzer durch zusätzliche Features länger auf der Suchseite halten um höhere Werbeinnahmen zu generieren. == Story: Taschenrechner Als Benutzer möchte ich bei Eingabe des Suchbegriffs "Rechner" oder bei der Eingabe einer Mathematischen Rechnung einen Taschenrechner als Web-Anwendung angezeigt bekommen, so daß ich nicht die Suche Verlassen muss === Acceptancetests ==== User calls Calculator [cols="1,10"] |=== | Given | User is on the main page | When | User enters 'calc' as search-term and submits the form | Then | the search result displays a calculator |===
  34. Das Testgerüst wird extrahiert… DB Systel GmbH | @RalfDMueller |

    JUG Saxony Day | 13.09.2019 34 = Spezifikation include::config.adoc[] Dieses Projekt soll den Benutzer durch zusätzliche Features länger auf der Suchseite halten um höhere Werbeinnahmen zu generieren. == Story: Taschenrechner Als Benutzer möchte ich bei Eingabe des Suchbegriffs "Rechner" oder bei der Eingabe einer Mathematischen Rechnung einen Taschenrechner als Web-Anwendung angezeigt bekommen, so daß ich nicht die Suche Verlassen muss === Acceptancetests ==== User calls Calculator [cols="1,10"] |=== | Given | User is on the main page | When | User enters 'calc' as search-term and submits the form | Then | the search result displays a calculator |=== @Ignore("not implemented") def "User calls Calculator"() { given: "User is on the main page" when: "User enters 'calc' as search-term and submits the form" then: "the search result displays a calculator" }
  35. … und ausgeführt wird DB Systel GmbH | @RalfDMueller |

    JUG Saxony Day | 13.09.2019 35
  36. …wodurch die Spezifikation den echten Test zeigt DB Systel GmbH

    | @RalfDMueller | JUG Saxony Day | 13.09.2019 36 = Spezifikation include::config.adoc[] Dieses Projekt soll den Benutzer durch zusätzliche Features länger auf der Suchseite halten um höhere Werbeinnahmen zu generieren. == Story: Taschenrechner Als Benutzer möchte ich bei Eingabe des Suchbegriffs "Rechner" oder bei der Eingabe einer Mathematischen Rechnung einen Taschenrechner als Web-Anwendung angezeigt bekommen, so daß ich nicht die Suche Verlassen muss === Acceptancetests ==== User calls Calculator [cols="1,10"] |=== | Given | User is on the main page | When | User enters 'calc' as search-term and submits the form | Then | the search result displays a calculator |=== = Spezifikation include::config.adoc[] Dieses Projekt soll den Benutzer durch zusätzliche Features länger auf der Suchseite halten um höhere Werbeinnahmen zu generieren. == Story: Taschenrechner Als Benutzer möchte ich bei Eingabe des Suchbegriffs "Rechner" oder bei der Eingabe einer Mathematischen Rechnung einen Taschenrechner als Web-Anwendung angezeigt bekommen, so daß ich nicht die Suche Verlassen muss === Acceptancetests include::{pathToSpec}acceptance.Specification2bSpec.adoc[ tag=User_calls_Calculator]
  37. … die Applikation wird entwickelt DB Systel GmbH | @RalfDMueller

    | JUG Saxony Day | 13.09.2019 37
  38. Fazit DB Systel GmbH | @RalfDMueller | JUG Saxony Day

    | 13.09.2019 38
  39. + =

  40. Vielen Dank für Ihre Aufmerksamkeit! Ralf.D.Mueller@DeutscheBahn.com https://rdmueller.github.io/feedback Clipart: presentermedia.com, licenced

    to ralf.d.mueller@gmail.com www.dbsystel.de