Perl6: Interfaces und Factories für Testdriven Development

Embed Size (px)

DESCRIPTION

In Perl 6 fehlen bislang Interfaces, Factories und DI-Container (DI=Dependency Injection). Diese sind aber für Test-Driven Development unverzichtbar. Mein Vortrag auf dem 14. Deutschen Perlworkshop bietet einerseits Motivation für und eine Einführung in Testdriven Development und zeigt zudem Realisierungsmöglichkeiten für die fehlenden Spracheelemente / globalen Variablen/Subs auf.

Citation preview

  • 1. Interfaces und Factories frTestdriven Development NotwendigePerl6 Erweiterungen fr die Entwicklung groerApplikationen. 14. Deutscher Perlworkshop Ralf Peine Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012

2. berblick Eine reale Fabrik Vom Code zum testbaren Code Erweiterungsvorschlge fr Perl6 Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 3. Ein realeFabrik Gigaset in BocholtInterfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 4. Aufgabe Verpackung fr das neue Supertelefon SL910Aentwickeln und produzieren Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 5. Paketinhalt Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 6. Im EinsatzSoftware Paket Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 7. Herstellung new Paket();Paket herstellen an Gigaset liefernInterfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 8. Packen zip(paket); Paket falten und fllen Paket auf Palette Palette in Container auf LKW Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 9. Transport upload_http(www/paket.zip);Container zu Hafen fahrenContainer auf Schiff Schiff nach Singapur Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 10. Transport (2)get_http(www/paket.zip); Schiff in Hafen Container auf LKWLKW zu Grohndler Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 11. auspackenunzip(paket.zip);Palette aus ContainerEinige Pakete aus Palette nehmen Pakete an Einzelhndler sendenPakete in Regal stellen Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 12. Software entwickeln Paket entwickeln Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 13. Paket-Entwicklung Paketdesigner ruft bei Gigaset an: Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 14. Paket-EntwicklungBitte einmal den kompletten Inhalt des SL910-Pakets! Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 15. Paket-EntwicklungGigaset: Den gibt es noch nicht!Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 16. Paket-Entwicklung Wir entwickeln ja selbstnoch!Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 17. Paket-EntwicklungDesigner:Wie soll ich dann das Paketentwickeln? Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 18. Paket-Entwicklung Gigaset: Wir haben eineBeschreibung! Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 19. Paket-Entwicklung Ihrem Kollegen hat dasausgereicht! Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 20. Beschreibung ? Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 21. Fabrik Software BeschreibungInterface Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 22. Definition SW-Schnittstelle(Interface)Wikipedia: Eine Schnittstelle gibt an,welche Methoden vorhanden sindoder vorhanden sein mssen ... Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 23. Interfaces FabrikSoftware Handset IHandset:{ IGeometrie; IGewicht }Basis IBasisLadeschale ILadeschale Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 24. Interfaces (2) Paket IPaket Geometrie IGeometrie Auenmae; Gewicht IGewicht Gewicht; Barcode IBarcode Barcode; faltenIPaket Falten(); ffnenIPaket Oeffnen(); Basis einlegenBool Add(IBasis basis); schlieen IPaket Schliessen(); versiegelnIPaket Versiegeln(); auspacken Object[] objsAuspacken(); Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 25. Gigaset-Fabrik!! Produziere Telefon SL910A (INation fuerLand)()w { IPaket paket = lager.HolePaket(fuerLand).Falten();nebool ok = true;ok &&= paket.Add(Lager.HoleBasis(fuerLand));nok &&= paket.Add(Lager.HoleHandset(fuerLand)); vook &&= paket.Add(Lager.HoleLadeschale(fuerLand));ok &&= paket.Add(Lager.HoleNetzteilBasis(fuerLand)); fok &&= paket.Add(Lager.HoleNetzteilHS(fuerLand));# ru ufif (ok) {A IGewicht gewicht =paket.Schlieen().Versiegeln().Gewicht; n paket = pruefer.Check(paket) if ! ei IsKorrekt(gewicht); palette.Add(paket) if paket != null;K} }Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 26. Gigaset unterwegs VersendeTelefone(IHafen nachHafen) {IContainer containerMitTelefonen = GigasetFactory.GetContainer(nachHafen); # Nicht etwa new() ILkw lkw = Spedition.LkwAnfordern(); # Nicht new() lkw.aufladen(containerMitTelefonen); lkw.fahrenZu(nachHafen); # } # Was sich im Container befindet, # ist dem Fahrer egal, # aber nicht dem Empfnger! Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 27. Gigaset Unit-Test Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 28. Implementiert dieselbe Das Fixture baut Schnittstellewie Unit-Test die Testumgebung auf und erzeugt das Original auch die Testdoubles. Die Objekte aus der Wird imSystem Umgebung des SUTFolgendenUnderwerden durchverwendet Test Testdoubles ersetztEine Einfhrung in testgetriebene Entwicklung liefertMartin Fowler:http://martinfowler.com/bliki/TestDrivenDevelopment.htmlhttp://www.martinfowler.com/bliki/TestDouble.html Interfaces und Factories fr Testdriven Development Ralf Peine 14. Deutscher Perlworkshop 2012 29. Gigaset Unit-Test (2) TestFalten() {IPaket testObject = testFixture.CreatePaket(); IPaket gefaltetesPaket = testObject.Falten(); testFixture.Validate(gefaltetesPaket.Geometrie); } # fertig ist der Test! Testffnen() TestSchlieen() TestVersiegeln() Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 30. Gigaset Unit-Test (3) Weil Add nur das Interface TestAdd() # Teil einlegenIBasis als Parameter { verlangt, kann hier einTestDouble statt einer # Testvorbereitung Basis bergeben werden! IPaket testObject = testFixture.CreatePaket().Falten(); IBasis basisTestDouble = testFixture.CreateBasisTestDouble(); # Test testObject.Add(basisTestDouble); # Validierung testObject.Schlieen(); # Geht zu !! # Keine Exceptions !! } # Fertig! Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 31. Gigaset Unit-Test (4) Aber wie schreibt man testbaren Code?Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 32. berleitungDas wirdim nchsten Teil des Vortrags erklrt Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 33. 2. Teil Vom Codezum testbaren Code Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 34. Vom Code zum testbaren CodeAufgabe Wrter aus einer Webseite zhlen undder Anzahl nach auflisten. Dazu wird der folgende Codeverwendet, der keinesfalls verndertwerden darf: Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 35. Vom Code zum testbaren Code (2) my $wordCounter = new WordCounter(); $wordCounter-> CountWordsOfWebFile ($remote_file,$minimalCount);Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 36. Vom Code zum testbaren Code (3) Denn dieses Codestck wird berall verwendet.Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 37. Vom Code zum testbaren Code (4) !!! 27 000 mal !! !!! Mindestens !!!Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 38. Initiale ImplementierungAlles wurde in einer Sub realisiert.Fr ein schnelles Script ist das ok,aber in einem groen System nichttestbar.Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 39. Initiale Implementierung (2)Das ist derkritische TeilInterfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 40. Initiale Implementierung (3)Hier ist das Codestck. Selbst aus dem Web lesen,Aber wo ist das Problem ? das ist schwer zu testenInterfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 41. 2. ImplementierungDer WordCounter liest selbst aus dem Webund analysiert in zweiter Methode Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 42. 2. Implementierung (2) Der kritische Code besteht nur noch aus 3Anweisungen Analyse wurde in zweite Methode verschoben Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 43. 3. ImplementierungDer WordCounter liest selbst aus dem Webmit einer dritten Methodeund analysiert in zweiter MethodeInterfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 44. 3. Implementierung (2)Web-Datei lesenwurde in eigeneMethode verschoben Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 45. 3. Implementierung (3)Web-Datei lesen wurde in eigene Methode verschobenSelbst aus dem Web lesen,das ist immer noch schwer zu testen Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 46. 4. ImplementierungDer WordCounter lssteinen WebReader aus dem Web lesen,den er aber selbst mit new erzeugt.Die Analyse fhrt er dann selbst in einereigenen Methode durch. Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 47. 4. Implementierung (2) Das new verhindertJetzt liest automatisiertes Testen der WebReader ohne Web-Zugriff. den Inhaltder Webseite einInterfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 48. 5. ImplementierungDer WordCounter lssteinen WebReader aus dem Web lesen,den er von einer Factory erzeugen lsst.Die Factory erzeugt er noch selbst.Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 49. 5. Implementierung Die Factory muss Das new verhindert auerhalb automatisiertes Testen. erzeugt werden. Die Factory erstellt den WebReader Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 50. 6. ImplementierungDer WordCounter lsst einen WebReader ausdem Web lesen,den er von einer Factory erzeugen lsst.Die Factory erzeugt er nicht mehr selbst, erverwendet die globale Factory.Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 51. 6. Implementierung (3)Code des Testrahmens (auen) Factoryerstellen undzuweisenNormalerProgrammablauf, kein Testcode!Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 52. 6. Implementierung (3)Code der Klasse (innen) Kein Aufruf von new() mehr notwendig! Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 53. 7. Test-ImplementierungEs muss keine neue Reader-Klasse erstellt werden,WordCounter ist testbar implementiert.Im Testrahmen muss nur die Factory angepasstwerden.Der WordCounter lsst einen Web-Reader aus demWeb lesen (denkt er !),den er von einer Factory erzeugen lsst. Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 54. 7. Test-Implementierung (2)Er verwendet die globale Factory, wie in dervorherigen Implementierung.Er erhlt einen Stub statt der Original-Klasse. Der Stub liefert nmlich einfach einenDas ist festen Text, ohne aus dem Web zu lesen! der Trick!Die Analyse fhrt er dann wie immer selbst ineiner eigenen Methode durch.Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 55. 7. Test-Implementierung (3) Der Test ist jetzt unabhngig vom Web,und der Code bleibtunverndert!Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 56. 7. Test-Implementierung (4) Fertig sind der WebReader oder Test-Stub,Als Klassenvariable welcher es gerade ist, kann man nie wissen!Die Factory erzeugtden WebReaderInterfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 57. 7. Test-Implementierung (5) Aber jedesmal eine neue Factory-Klasse zu schreiben,ist zu aufwendig...Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 58. 8. Implementierung Einfacher geht es mit DI-Containernstatt Factories.Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 59. Dependency InjectionContainerAha !?!? DI-Container ?!?Etwas hnliches wie ein Postfach/ Schlsselboard an der Hotelrezeption Man fragt einfach nach, ob etwas frdie Instanz/die Klasse hinterlegtwurde. Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 60. Ein DI-ContainerFcher, in denen etwas Fach mit abgelegt werden kann WebReaderStub Fach mitWebReaderLeeres Fach Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 61. 8. Implementierung (2) Der WordCounter muss fr die Verwendung von DI-Containern ein letztes Mal angepasst werden. Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 62. 8. Implementierung (3)Den globalen DiContainer in Klassenvariablen speichern Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 63. 8. Implementierung (4)Code der Klasse Fertig sind der (innen)WebReader oder Test-Stub,welcher genau, kann man nie wissen! Statt new () Schnittstelle desgesuchten ObjektsFr wen Falls hinterlegtnichts hinterlegt wurdeInterfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 64. 9. Test-ImplementierungUnd jetzt einfach ber ein Closure etwasanderes als einen WebReaderhinterlegendurch$DiContainer->DepositForCreate(...).Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 65. 9. Test-Implementierung (2)Fr welcheCode desEine Closure Instanz /Testrahmensfr die ErzeugungKlasse (auen) hinterlegen hinterlegtSchnittstelle des hinterlegten Objekts Fr den NachfragerAber nur, falls dereine Instanz erzeugen WordCounter keinenWebReader verwenden soll. Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 66. 9. Test-Implementierung (3) Die Implementierungbleibt unverndertDiesmal ist esein Stub,der einenfesten Text liefert undnicht aus dem Web liest.Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 67. Ziel erreicht! Der Produktcode kann unverndert getestet werden. Die nderungen werdennur im Testrahmen vorgenommen.Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 68. Ziel erreicht (2)! Es gibt zwei Lsungen: Diese 2 Beide LsungenLsungen decken alle 6. + 7. mit FactoriesHaben ihre EinsatzgebieteEinsatzgebiete ab. 8. + 9. mit DIContainernInterfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 69. berleitungAber wann soll man welche Lsung whlen ?Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 70. berleitung Damit befasstsich der letzte Teil des Vortrags Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 71. Ende Teil 2Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 72. 3. Teil Erweiterungs-Vorschlge fr Perl6 Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 73. InterfacesEin Interface ist eine abstrakte Role,in der alle Methoden = undef gesetzt sind. Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 74. Interfaces (2) Mit einem Unterschied: In der Role muss man nachsehen, obnoch etwas implementiert werden muss. Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 75. Interfaces (3)Ein Interface muss dagegenimmerimplementiert werden Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 76. Interfaces (4)Dieser Teil wird mitInterfaces berflssig role WebReaderRole { method ReadWebFile = { }; }Huch!Versehentlich leer definiert!Damit muss die Methodein der Ableitung nicht mehr definiert werden... role WebReaderRole { method ReadWebFile { }; } Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 77. Interfaces (5)Neues Konvention:Schlsselwort:Interfaces beginnen interface mit I interface IWebReader { method ReadWebFile; }Keine ungewollte,leere Implementierung mehr mglich Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 78. Interfaces (6)SchlsselwortDer Name des zu impl fr implements, implementierenden danach folgt ein Interface Interfaces class WebReader impl IWebReader { method ReadWebFile { Andere Vorschlge fr das neue KeyWord ? # } }Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 79. Interfaces (7) Das war schon alles!Keine weiteren Syntaxnderungennotwendig! Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 80. Factory oder DI-Container ?DI-Container verwendet man immer dann, wenn man nurTestdoubles zum Testen erzeugen muss.Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 81. Factory oder DI-Container ? (2) EineFactoryverwendet man immerdann, wenn manaus mehreren Implementierungs- Varianten einer Klasse (zur Laufzeit) eine fr den Produktivcode auswhlenmchte. Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 82. Factories fr UI und GUI Ein Interface interface IUiFactory {fr eine Factory ! method CreateForm; method CreateCloseButton; } interface IForm impl IWidget { method Add (IWidget widget); method Run; } interface IButton impl IWidget { method Push; }Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 83. Factories fr UI und GUI (2) Diese Variable solltezumHier wird die UiFactoryStandard werden.fr alle zentral eingestellt Sub HelloWorld {my $uiFactory = $FactoryService.UiFactory; my $form = $uiFactory.CreateForm(); my $button = $uiFactory.CreateCloseButton(); $form.Add($button); Irgendeine UI-Factory aus der reichhaltigen $form.Run(); Auswahl }Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 84. TextUiFactoryAutomaticTestUiFactory IUiFactoryEin Gui-Test- Framework, ?!?mit dem manEingaben undAusgabenaus Dateien lesenIGuiFactory und schreiben kann.TkGuiFactoryWinForms- GtkGuiFactoryFactoryWxGuiFactoryInterfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 85. Factories fr UI und GUI (4) Damit das mglich ist,mssten alle diese Guisdieselben Schnittstellen frIButton IForm...untersttzen.Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 86. Factories fr UI und GUI (5)Vielleicht erlebenwir das ja noch...Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 87. Testdriven Development Damit sind in der Perl Syntaxalle Voraussetzungen fr Testdriven-Development erfllt. Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 88. Testdriven Development (2)Der Code und der Test knnen knnen gleichzeitig gleichzeitigentwickelt entwickelt werden werdenInterfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 89. Testdriven Development (3)Zur Entwicklung groer Applikationenfehlen aber noch Unit-Test-FrameworksP-Unit und(Perl-Unit-Tester) siehe N-Unit, J-UnitMocking-Frameworks Leichte Erstellung von TestDoubles wie Stubs, Spys und?!?Mocks,ohne eigene Klassen schreiben zu mssenInterfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 90. Zusammenfassung BeispieVertrag VertraglzwischenzwischenCodeVertragEntwickler Entwicklerund Nutzer und Nutzer Test-LibProdukt-LibTest 2 Push-TestCodeIPushButton ProductCode Button- Test-DoubleOptional ITest- TestFixture PushButton NurTest-ImplementierunPBImpl1PB2PB3Diese Fixturegs-Klassen anweisungSollteneines new()new() PB.new() anderen aufrufen Factory1 F2F3TestsIUIFactory DIContainer Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 91. AbschlussGibt es denn berhaupt groe Perl-Applikationen? Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 92. Abschluss (2) Ja, und sogar eine, die hier jeder kennt!Interfaces und Factories fr Testdriven DevelopmentRalf Peine 14. Deutscher Perlworkshop 2012 93. Abschluss (3)Eine,die davon sehr profitieren wrde. Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012 94. CPAN!! Interfaces und Factories fr Testdriven DevelopmentRalf Peine14. Deutscher Perlworkshop 2012