Folge 38: Erzähl mir, wie du testest

Tatortmelodie! Schnitt!

Rosenmontag in Solingen, es dämmert. Ein einsamer Recke sitzt im spärlichen Widerschein seines Röhrenlaptops. In seiner Brille schimmert es rot. DIE TESTS SCHLAGEN FEHL!

Aber er weiß nicht warum! Er schaut schon ewige Minuten auf den Fehler! Verzweifelt drückt er auf den Play-Button! Wieder und wieder! Kryptische Zeichen fliegen über den Bildschirm.

Da! Da ist ein Hinweis! Ein Indiz! Das muss es sein! Wie konnte das jemals ….

“Ey Holger!”

Keine Reaktion.

“Ey Holger deine Tests sind rot!”

Verwirrt guckt der Angesprochene hoch in das Gesicht eines Piraten.

“Los Holger, wir müssen die Folge noch aufnehmen”

“Ja Moment, noch eine Zeile, dann hab ich …”

“Papperlapapp! YOLO! Jetzt komm, Folge aufnehmen! Bier steht schon da! Kannst mir ja dann erzählen, was du da mal wieder verbockt hast!”

Der Freibeuter zieht das Stromkabel des Laptops und aus dramaturgischen Gründen geht dieser sofort aus.

Es ist Autoweird-Zeit!

Links:

  • Holger glänzt mit Karnevalshalbwissen und erzählt über den Hoppeditz.
  • Der Holger war auch im Karneval unterwegs, und zwar war er bei einer Straßenbahnkarnevalssitzung.
  • Der Bene trinkt Pesto-Bier in der Trinkhalle in Bochum.
  • An Jest machen wir nen Haken dran!
  • Enzyme macht es einfacher, Assertions auf seine React Components zu formulieren.
  • Mit Shallow Rendering kann man nur einen kleinen Teil seiner Anwendung im Test rendern.
  • Holger erzählt dem Bene von Cucumber.js. Cucumber für JavaScript. Der Bene macht große Augen!
  • Je mehr offline passieren kann/muss, desto mehr Logik muss auf dem Client vorhanden sein.
  • Redux-Reducer sind etwas, das aus einem (View-)Zustand einen anderen (View-)Zustand macht. Eine pure function.
  • Gherkin ist die Sprache die in Cucumber Tests verwendet wird. Warum die Unterscheidung? Gründe!
    https://github.com/cucumber/cucumber-js/blob/master/docs/support_files/world.md
  • Der Bene verwendet Cucumber im Backend. Findet das auch gut.
  • Mit Cucumber und Gherkin kann man Akzeptanztests schreiben.
  • Mal wieder fällt der Begriff der Testpyramide.
  • In Benes Anwendung herscht Clean Architecture.
  • Der Bene verwendet in den Tests Builder und Templates. Das macht die Tests lesbarer, da immer wiederkehrende Testdaten benannt werden.
  • In Cucumber.js kann man einen Kontext verwenden, um Informationen zwischen Teststeps auszutauschen.
  • Der Bene hat auch mal was Schönes gemacht und Refined Types ausprobiert. Genauere Typen für Scala.
  • Das hat nix mit Cats zu tun.
  • Und auch nix mit Shapeless! Echt jetzt?
  • Scala Macros sind selbsterklärend! :))
  • Michael Feathers ist nicht nur der Autor des legendären Working effectively with Legacy Code, sondern er denkt auch über static vs. dynamic Typing nach.
  • Flow ist ein static type checker für JavaScript.
  • Der Bene liest das Scala Red Book. Wir erwarten Großes!
  • Functional Sets sind ein spannender Weg, über Sets nachzudenken.
  • Link zum Github Issue.

Bier:

  • Der Bene trinkt ein [Finne Pale Ale]( – https://untappd.com/b/finne-brauerei-pale-ale/1567859) vom Gregor. Voll jovel.
  • Der Holger trinkt ein glutenfreiese Jopen Hop Zij Met Ons. Limitiert und super. Also trotz glutenfrei und so.

Datum der Aufnahme: 12.02.2018

10 Gedanken zu „Folge 38: Erzähl mir, wie du testest

  1. greelgorke kommentierte am 28.02.2018:

    in Benes projekt testen wir auch Interaktionen, auch mit Enzyme (.simulate API) und dann wird geprüft, ob entweder der State der Komponente geändert wurde, oder, was meist der Fall is, ob die richtige Action mit richtigen Parametern gefeuert wurde. Der ActionCreator ist dann ein Mock.

    Zum Thema Compiler vs Testing:
    Genau, der Compiler ist quasi eine Precondition. In JS testen wir aber relativ selten ob das die richtige Instanz ist, aka vom passendem Typ. Viel mehr schauen ob es eine Ente ist. Was letzlich auch ein Precondition-Check ist. Dann kann ich auch Design by Contract machen, was meinen Testaufwand reduzieren kann.

    Ich glaube das, was ich über die paar Jahre der Auseinandersetzung zwischen Dynamic und Static typing, gelernt habe, ist dass beide Lager eine leicht unterschiedliche Attitüde gegenüber dem Nutzer des Codes pflegen.
    Static Typing sagt: Wenn du meine Bedingungen komplett erfühlst (Kompiler), garantiere ich, ich tue, was du erwartest.
    Dynamic Typing sagt: Du kannst tun was du willst, wenn du meine Annahmen triffst, erfülle ich dir deine Erwartung, wenn nicht…. nun es ist dein Code ¯_(ツ)_/¯

    Die menge an Testing ist vergleichbar. In JS ersetzt man den Compiler durch Lint und Precondition Checks.

    my 2 cents

  2. LukaJCB kommentierte am 06.03.2018:

    Um meinen Senf auch nochmal dazu zu geben, testing mit nem guten Compiler & Refined ist für mich deutlich deutlich einfacher, da man nun genaue Spezifikationen angeben kann und seine Funktionen mit Properties a la QuickCheck (ScalaCheck etc.) testen kann und somit direkt alle Edge Cases mit testet, das kriegt man mMn manuell niemals so gut hin 🙂

    Auf jeden Fall eine sehr coole Folge, weiter so 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.