SlideShare ist ein Scribd-Unternehmen logo
Ralf Eggert | Travello GmbH

Unit Testing einer
Zend-Framework-2-Anwendung
Über Ralf Eggert
• Dipl. Wirtschaftsinformatiker (FH)
• Jahrgang 1972
• GF Travello GmbH
• Buchautor zum ZF1 & ZF2 (AW / Galileo)
• Kolumnist PHP-Magazin
• ZF seit 2006
• Contributor, Speaker, Trainer, Papa
• http://www.zendframeworkschulung.de/
Drei Fragen an das Publikum?
• Wer nutzt das Zend Framework 2?
• Wer verwendet PHPUnit für Unit Tests?
• Wer hat schon einmal testgetrieben entwickelt?
PHPUnit

Quelle: Stephanie Hofschlaeger / pixelio.de
PHPUnit über sich
• »PHPUnit is the de-facto standard for unit testing
in PHP projects. It provides both a framework
that makes the writing of tests easy as well as
the functionality to easily run the tests and
analyse their results.«
– Quelle: https://github.com/sebastianbergmann/phpunit/

• Autor: Sebastian Bergmann
• Code-Coverage Reports
• Datenbank Tests mit DbUnit
• Stubs, Mocks, TDD, BDD, Logging, Selenium, ...
PHPUnit Features
• Assertions
– $this->assertEquals('foo', $bar);
– $this->assertContains('it', array('de', 'at', 'ch));

• Annotations
– @codeCoverageIgnore
– @expectedExceptionCode CustomerException
– @group Customer

• Fehlerbehandlung
– PHP Exceptions
– PHP Error
Installation PHPUnit
• PHP Archiv (PHAR)
• Composer
• PEAR
• Optionale Pakete (Auswahl)
– DbUnit
– PHPUnit_Selenium
– PHPUnit_Story (für Behavior-Driven Development)
– PHPUnit_TicketListener für GitHub, Google Code usw.
PHPUnit Shell
• Tests ausführen
– phpunit

• Testausführung im JSON-Format loggen
– phpunit --log-json

• Code Coverage Report im HTML-Format
– phpunit --coverage-html

• Tests einer Gruppe ausführen
– phpunit --group Customer

• Hilfe anzeigen
– phpunit --help
Zend Framework 2

Quelle: Yathin S Krishnappa / wikimedia
Zend Framework 2 über sich
• »Zend Framework 2 is an open source
framework for developing web applications and
services using PHP 5.3+.«
– Quelle: http://framework.zend.com/about/

• Aktuelles Release 2.2.4
• Durch Module erweiterbar
• Erweiterbar durch eigene Features
• Sicherheit, Performance & Enterprise Ready
• Große Community
Zend Framework 2 Features
• Service-Manager
• Event-Manager
• Module-Manager
• Konfiguration
• MVC & RESTful Webservice
• Native Unterstützung für diverse RDMS
• Formulare, Input-Filter, Filter und Validatoren
Aufgabe für Beispielprojekt
• Kundenmodul auf ZF2-Basis entwickeln
• Keine Abhängigkeit zu anderen Modulen
• Modelinfrastruktur mit ZF2-Komponenten
umsetzen
• Kunden anlegen, ändern, löschen und anzeigen
• Hohe Testabdeckung durch TDD erreichen
• PHPUnit für Unit-Tests einsetzen
• DbUnit für Integrationstests einsetzen
Anwendungsstruktur

Model
Service

Action
Controller

Formular
Modelinfrastruktur
Filter

Manuela

Filter

Peter

Filter

Klaus
Entität

Hydrator

Model
Service

Input
Filter

Validator
Validator

Datenbank

Validator
Installation Beispielprojekt
• Projekt installieren
– https://github.com/RalfEggert/ipc2013-testing

– Per git clone
– git checkout 01_success

• Composer starten
– php composer.phar selfupdate
– php composer.phar install

• Virtual Host »ipc2013.testing« einrichten
• Im Browser aufrufen
– http://ipc2013.testing
Datenbankstruktur
Setup

Quelle: BirgitH / pixelio.de
Ausgangslage
• Branch 01_success
• Modul Application stellt ZF2 Anwendung bereit
• Leeres Modul Customer angelegt und aktiviert
Setup
• Branch 02_setup
• PHPUnit in composer.json aufgenommen
• Verzeichnis /tests im Customer Modul erstellt
– phpunit.xml
– Bootstrap.php

• Test-Konfiguration eingerichtet
• Verzeichnis /tests/CustomerTest erstellt
– Erster Unit-Test zum Testen des Moduls
MVC einrichten

Quelle: sokaeiko / pixelio.de
Action-Controller testen
• Branches 03_01_failing bis 03_04_success
• Testet ob Modul Startseite abrufbar ist
• Konfiguration Routing, Controller, View-Manager
• IndexController mit indexAction()

• View-Skript
• Module.php
– Konfiguration laden
– Autoloading
Kunden als
Entitäten modellieren

Quelle: RainerSturm / pixelio.de
CustomerEntity testen
• Branches 04_01_failing bis 04_04_success
• Testet ob CustomerEntity existiert und über
Getter- und Setter-Methoden verfügt
• CustomerEntity anlegen
– Private Eigenschaften
– Setter-Methoden
– Getter-Methoden
Hydrator einrichten

Quelle: Andreas Hermsdorf / pixelio.de
CustomerHydrator testen
• Branches 05_01_failing bis 05_04_success
• Testet ob CustomerHydrator existiert
• Testet ob Daten einer CustomerEntity als Array
zurückgegeben werden
• Testen ob CustomerEntity mit Array-Daten
befüllt werden können
• CustomerHydrator anlegen
– Erweitert ZendStdlibHydratorClassMethods
TableGateway
zur Datenspeicherung

Quelle: Thorben Wengert / pixelio.de
CustomerTable testen 1
• Branches 06_01_failing bis 06_08_success
• Testet ob CustomerTable existiert und der
richtigen Datenbanktabelle zugeordnet ist
• Testet Resultset-Prototyp für CustomerEntity
• Testet Methode zum Laden aller Kunden
• Testet Methode zum Laden eines Kunden
• CustomerTable anlegen
– Erweitert ZendDbTableGatewayTableGateway
– Implementiert Konstruktor und benötigte Methoden
CustomerTable testen 2
• Branches 07_01_failing bis 07_04_success
• Testet Anbindung von CustomerTable an eine
Datenbank mit DbUnit
• Testet lesende und schreibende Methoden
• CustomerTable erweitern
– Erweitert Methode zum Lesen aller Kunden
– Methoden zum Anlegen, Ändern und Löschen
InputFilter
zur Datenvalidierung

Quelle: Stephanie Hofschlaeger / pixelio.de
CustomerInputFilter testen
• Branches 08_01_failing bis 08_04_success
• Testet ob CustomerInputFilter existiert
• Testet InputFilter mit gültigen Daten
• Testen InputFilter mit ungültigen Daten und prüft
Fehlermeldungen
• CustomerInputFilter anlegen
– Erweitert ZendInputFilterInputFilter
– Fügt Input Elemente mit Filtern und Validatoren hinzu
Formulare
zur Dateneingabe

Quelle: Matthias Preisinger / pixelio.de
CustomerForm testen
• Branches 09_01_failing bis 09_05_success
• Testet ob CustomerForm existiert
• Testet ob alle Elemente vorhanden sind
• Testen Übergabe von Array-Daten
• CustomerForm anlegen
– Erweitert ZendFormForm
– Fügt Formularelemente hinzu
Model-Service
dirigiert Zusammenspiel

Quelle: D. Braun / pixelio.de
CustomerService testen 1
• Branches 10_01_failing bis 10_12_success
• Testet ob CustomerService existiert
• Testet Getter/Setter für TableGateway/InputFilter
• Testet Lesen aller Kunden und eines Kunden
• Testet Anlegen, Ändern und Löschen
• CustomerService anlegen
– Implementiert Setter/Getter
– Implementiert lesende Methoden
– Implementiert schreibende Methoden
CustomerService testen 2
• Branches 11_01_failing bis 11_08_success
• Testet Anbindung von CustomerService an eine
Datenbank mit DbUnit
• Testet lesende und schreibende Methoden
• CustomerService erweitern
– Erweitert Methoden zum Anlegen, Ändern und
Löschen durch Zugriff auf Datenbank
MVC erweitern

Quelle: sokaeiko / pixelio.de
Action-Controller testen 2
• Branches 12_01_failing bis 12_11_success
• Testet Getter/Setter für IndexController
• Testet API für Anzeige der Kundenliste und eines
Kunden
• Testet Datenbankzugriff für Anzeige der
Kundenliste und eines Kunden mit DbUnit
• MVC erweitern
– IndexController erweitern
– View-Skripte anlegen / erweitern
– Konfiguration Service-Manager mit Factories
Action-Controller testen 3
• Branches 13_01_failing bis 13_14_success
• Testet API für Anlegen, Ändern und Löschen von
Kunden
• Testet Datenbankzugriff für Anlegen, Ändern und
Löschen von Kunden mit DbUnit
• MVC erweitern
– IndexController erweitern
– View-Skripte anlegen / erweitern
– Konfiguration Service-Manager mit Factories
Geschafft

Quelle: günther gumhold / pixelio.de
Screen
Ralf Eggert | Travello GmbH

Vielen Dank für Ihre Aufmerksamkeit

Weitere ähnliche Inhalte

Ähnlich wie Unit Testing einer Zend-Framework 2 Anwendung

Zend Framework 2 - Best Practices
Zend Framework 2 - Best PracticesZend Framework 2 - Best Practices
Zend Framework 2 - Best Practices
Ralf Eggert
 
Frontend Formulare in TYPO3 8 LTS
Frontend Formulare in TYPO3 8 LTSFrontend Formulare in TYPO3 8 LTS
Frontend Formulare in TYPO3 8 LTS
Peter Kraume
 
Tipps & Tricks für Erweiterungsentwickler - JoomlaDay Deutschland 2014 - Köln
Tipps & Tricks für Erweiterungsentwickler - JoomlaDay Deutschland 2014 - KölnTipps & Tricks für Erweiterungsentwickler - JoomlaDay Deutschland 2014 - Köln
Tipps & Tricks für Erweiterungsentwickler - JoomlaDay Deutschland 2014 - Köln
Viktor Vogel
 
Scrum als agiles Vorgehensmodell für Programmierer
Scrum als agiles Vorgehensmodell für ProgrammiererScrum als agiles Vorgehensmodell für Programmierer
Scrum als agiles Vorgehensmodell für Programmierer
Tobias Schlüter
 
Zend Framework 2 feat. MongoDB
Zend Framework 2 feat. MongoDBZend Framework 2 feat. MongoDB
Zend Framework 2 feat. MongoDB
Ralf Eggert
 
Ringvorlesung ITmitte.de : Vortrag der FIO SYSTEMS AG über Unit Tests und TDD
Ringvorlesung ITmitte.de : Vortrag der FIO SYSTEMS AG über Unit Tests und TDDRingvorlesung ITmitte.de : Vortrag der FIO SYSTEMS AG über Unit Tests und TDD
Ringvorlesung ITmitte.de : Vortrag der FIO SYSTEMS AG über Unit Tests und TDD
Community ITmitte.de
 
Formulare in TYPO3 8.7 LTS
Formulare in TYPO3 8.7 LTSFormulare in TYPO3 8.7 LTS
Formulare in TYPO3 8.7 LTS
Peter Kraume
 
Testmanagement mit Visual Studio 2013
Testmanagement mit Visual Studio 2013Testmanagement mit Visual Studio 2013
Testmanagement mit Visual Studio 2013
Nico Orschel
 
Vorstellung von CollabNet TeamForge 8.0 (German)
Vorstellung von CollabNet TeamForge 8.0 (German)Vorstellung von CollabNet TeamForge 8.0 (German)
Vorstellung von CollabNet TeamForge 8.0 (German)
CollabNet
 
SpiraTeam: Typische Implementierungen bei Kunden
SpiraTeam: Typische Implementierungen bei KundenSpiraTeam: Typische Implementierungen bei Kunden
SpiraTeam: Typische Implementierungen bei Kunden
Adam Sandman
 
Android Testing
Android Testing Android Testing
Android Testing
Alexander Pacha
 
GWT – Google Web Toolkit in der Praxis
GWT – Google Web Toolkit in der PraxisGWT – Google Web Toolkit in der Praxis
GWT – Google Web Toolkit in der Praxis
Cenarion Information Systems GmbH
 
Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...
Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...
Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...
Andreas Wissel
 
Vortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development EnvironmentsVortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development Environments
Thorsten Kamann
 
FMK2022 Dokumentation - Thomas Hirt
FMK2022 Dokumentation - Thomas HirtFMK2022 Dokumentation - Thomas Hirt
FMK2022 Dokumentation - Thomas Hirt
Verein FM Konferenz
 
CDI
CDICDI
ALM mit TFS 2010
ALM mit TFS 2010ALM mit TFS 2010
ALM mit TFS 2010
NETUserGroupBern
 
Das Kung Fu des Code Reviews
Das Kung Fu des Code ReviewsDas Kung Fu des Code Reviews
Das Kung Fu des Code Reviews
Christian Erhardt
 
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
Florian Wolters
 

Ähnlich wie Unit Testing einer Zend-Framework 2 Anwendung (20)

Zend Framework 2 - Best Practices
Zend Framework 2 - Best PracticesZend Framework 2 - Best Practices
Zend Framework 2 - Best Practices
 
Frontend Formulare in TYPO3 8 LTS
Frontend Formulare in TYPO3 8 LTSFrontend Formulare in TYPO3 8 LTS
Frontend Formulare in TYPO3 8 LTS
 
Tipps & Tricks für Erweiterungsentwickler - JoomlaDay Deutschland 2014 - Köln
Tipps & Tricks für Erweiterungsentwickler - JoomlaDay Deutschland 2014 - KölnTipps & Tricks für Erweiterungsentwickler - JoomlaDay Deutschland 2014 - Köln
Tipps & Tricks für Erweiterungsentwickler - JoomlaDay Deutschland 2014 - Köln
 
Scrum als agiles Vorgehensmodell für Programmierer
Scrum als agiles Vorgehensmodell für ProgrammiererScrum als agiles Vorgehensmodell für Programmierer
Scrum als agiles Vorgehensmodell für Programmierer
 
Zend Framework 2 feat. MongoDB
Zend Framework 2 feat. MongoDBZend Framework 2 feat. MongoDB
Zend Framework 2 feat. MongoDB
 
imatics FormEngine
imatics FormEngineimatics FormEngine
imatics FormEngine
 
Ringvorlesung ITmitte.de : Vortrag der FIO SYSTEMS AG über Unit Tests und TDD
Ringvorlesung ITmitte.de : Vortrag der FIO SYSTEMS AG über Unit Tests und TDDRingvorlesung ITmitte.de : Vortrag der FIO SYSTEMS AG über Unit Tests und TDD
Ringvorlesung ITmitte.de : Vortrag der FIO SYSTEMS AG über Unit Tests und TDD
 
Formulare in TYPO3 8.7 LTS
Formulare in TYPO3 8.7 LTSFormulare in TYPO3 8.7 LTS
Formulare in TYPO3 8.7 LTS
 
Testmanagement mit Visual Studio 2013
Testmanagement mit Visual Studio 2013Testmanagement mit Visual Studio 2013
Testmanagement mit Visual Studio 2013
 
Vorstellung von CollabNet TeamForge 8.0 (German)
Vorstellung von CollabNet TeamForge 8.0 (German)Vorstellung von CollabNet TeamForge 8.0 (German)
Vorstellung von CollabNet TeamForge 8.0 (German)
 
SpiraTeam: Typische Implementierungen bei Kunden
SpiraTeam: Typische Implementierungen bei KundenSpiraTeam: Typische Implementierungen bei Kunden
SpiraTeam: Typische Implementierungen bei Kunden
 
Android Testing
Android Testing Android Testing
Android Testing
 
GWT – Google Web Toolkit in der Praxis
GWT – Google Web Toolkit in der PraxisGWT – Google Web Toolkit in der Praxis
GWT – Google Web Toolkit in der Praxis
 
Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...
Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...
Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...
 
Vortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development EnvironmentsVortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development Environments
 
FMK2022 Dokumentation - Thomas Hirt
FMK2022 Dokumentation - Thomas HirtFMK2022 Dokumentation - Thomas Hirt
FMK2022 Dokumentation - Thomas Hirt
 
CDI
CDICDI
CDI
 
ALM mit TFS 2010
ALM mit TFS 2010ALM mit TFS 2010
ALM mit TFS 2010
 
Das Kung Fu des Code Reviews
Das Kung Fu des Code ReviewsDas Kung Fu des Code Reviews
Das Kung Fu des Code Reviews
 
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
 

Mehr von Ralf Eggert

PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
PHP Rewrite: Do the right thing (IPC Berlin 2024)
PHP Rewrite: Do the right thing (IPC Berlin 2024)PHP Rewrite: Do the right thing (IPC Berlin 2024)
PHP Rewrite: Do the right thing (IPC Berlin 2024)
Ralf Eggert
 
ChatGPT: unser täglich' Bot gib uns heute
ChatGPT: unser täglich' Bot gib uns heuteChatGPT: unser täglich' Bot gib uns heute
ChatGPT: unser täglich' Bot gib uns heute
Ralf Eggert
 
Der ultimative PHP Framework Vergleich 2023 Edition
Der ultimative PHP Framework Vergleich 2023 EditionDer ultimative PHP Framework Vergleich 2023 Edition
Der ultimative PHP Framework Vergleich 2023 Edition
Ralf Eggert
 
PHP Module als Rundum-Sorglos-Pakete entwickeln
PHP Module als Rundum-Sorglos-Pakete entwickelnPHP Module als Rundum-Sorglos-Pakete entwickeln
PHP Module als Rundum-Sorglos-Pakete entwickeln
Ralf Eggert
 
Alexa, what's next?
Alexa, what's next?Alexa, what's next?
Alexa, what's next?
Ralf Eggert
 
Alexa, wohin geht die Reise
Alexa, wohin geht die ReiseAlexa, wohin geht die Reise
Alexa, wohin geht die Reise
Ralf Eggert
 
8. Hamburg Voice Interface Meetup
8. Hamburg Voice Interface Meetup8. Hamburg Voice Interface Meetup
8. Hamburg Voice Interface Meetup
Ralf Eggert
 
Welcome Bixby
Welcome BixbyWelcome Bixby
Welcome Bixby
Ralf Eggert
 
Alexa Skill Maintenance
Alexa Skill MaintenanceAlexa Skill Maintenance
Alexa Skill Maintenance
Ralf Eggert
 
Vom Zend Framework zu Laminas
Vom Zend Framework zu LaminasVom Zend Framework zu Laminas
Vom Zend Framework zu Laminas
Ralf Eggert
 
Alexa Skills und PHP? Passt das zusammen?
Alexa Skills und PHP? Passt das zusammen?Alexa Skills und PHP? Passt das zusammen?
Alexa Skills und PHP? Passt das zusammen?
Ralf Eggert
 
Mit Jovo von 0 auf 100
Mit Jovo von 0 auf 100Mit Jovo von 0 auf 100
Mit Jovo von 0 auf 100
Ralf Eggert
 
Vom Zend Framework zu Laminas
Vom Zend Framework zu LaminasVom Zend Framework zu Laminas
Vom Zend Framework zu Laminas
Ralf Eggert
 
Alexa for Hospitality
Alexa for HospitalityAlexa for Hospitality
Alexa for Hospitality
Ralf Eggert
 
Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...
Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...
Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...
Ralf Eggert
 
Fortgeschrittene Techniken für erfolgreiche Sprachanwendungen
Fortgeschrittene Techniken für erfolgreiche SprachanwendungenFortgeschrittene Techniken für erfolgreiche Sprachanwendungen
Fortgeschrittene Techniken für erfolgreiche Sprachanwendungen
Ralf Eggert
 
Die sieben Projektphasen für Voice Projekte
Die sieben Projektphasen für Voice ProjekteDie sieben Projektphasen für Voice Projekte
Die sieben Projektphasen für Voice Projekte
Ralf Eggert
 
Künstliche Intelligenz – Traum und Wirklichkeit
Künstliche Intelligenz – Traum und WirklichkeitKünstliche Intelligenz – Traum und Wirklichkeit
Künstliche Intelligenz – Traum und Wirklichkeit
Ralf Eggert
 
Multi-Modal Voice Development with Amazon Alexa
Multi-Modal Voice Development with Amazon AlexaMulti-Modal Voice Development with Amazon Alexa
Multi-Modal Voice Development with Amazon Alexa
Ralf Eggert
 

Mehr von Ralf Eggert (20)

PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
PHP Rewrite: Do the right thing (IPC Berlin 2024)
PHP Rewrite: Do the right thing (IPC Berlin 2024)PHP Rewrite: Do the right thing (IPC Berlin 2024)
PHP Rewrite: Do the right thing (IPC Berlin 2024)
 
ChatGPT: unser täglich' Bot gib uns heute
ChatGPT: unser täglich' Bot gib uns heuteChatGPT: unser täglich' Bot gib uns heute
ChatGPT: unser täglich' Bot gib uns heute
 
Der ultimative PHP Framework Vergleich 2023 Edition
Der ultimative PHP Framework Vergleich 2023 EditionDer ultimative PHP Framework Vergleich 2023 Edition
Der ultimative PHP Framework Vergleich 2023 Edition
 
PHP Module als Rundum-Sorglos-Pakete entwickeln
PHP Module als Rundum-Sorglos-Pakete entwickelnPHP Module als Rundum-Sorglos-Pakete entwickeln
PHP Module als Rundum-Sorglos-Pakete entwickeln
 
Alexa, what's next?
Alexa, what's next?Alexa, what's next?
Alexa, what's next?
 
Alexa, wohin geht die Reise
Alexa, wohin geht die ReiseAlexa, wohin geht die Reise
Alexa, wohin geht die Reise
 
8. Hamburg Voice Interface Meetup
8. Hamburg Voice Interface Meetup8. Hamburg Voice Interface Meetup
8. Hamburg Voice Interface Meetup
 
Welcome Bixby
Welcome BixbyWelcome Bixby
Welcome Bixby
 
Alexa Skill Maintenance
Alexa Skill MaintenanceAlexa Skill Maintenance
Alexa Skill Maintenance
 
Vom Zend Framework zu Laminas
Vom Zend Framework zu LaminasVom Zend Framework zu Laminas
Vom Zend Framework zu Laminas
 
Alexa Skills und PHP? Passt das zusammen?
Alexa Skills und PHP? Passt das zusammen?Alexa Skills und PHP? Passt das zusammen?
Alexa Skills und PHP? Passt das zusammen?
 
Mit Jovo von 0 auf 100
Mit Jovo von 0 auf 100Mit Jovo von 0 auf 100
Mit Jovo von 0 auf 100
 
Vom Zend Framework zu Laminas
Vom Zend Framework zu LaminasVom Zend Framework zu Laminas
Vom Zend Framework zu Laminas
 
Alexa for Hospitality
Alexa for HospitalityAlexa for Hospitality
Alexa for Hospitality
 
Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...
Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...
Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...
 
Fortgeschrittene Techniken für erfolgreiche Sprachanwendungen
Fortgeschrittene Techniken für erfolgreiche SprachanwendungenFortgeschrittene Techniken für erfolgreiche Sprachanwendungen
Fortgeschrittene Techniken für erfolgreiche Sprachanwendungen
 
Die sieben Projektphasen für Voice Projekte
Die sieben Projektphasen für Voice ProjekteDie sieben Projektphasen für Voice Projekte
Die sieben Projektphasen für Voice Projekte
 
Künstliche Intelligenz – Traum und Wirklichkeit
Künstliche Intelligenz – Traum und WirklichkeitKünstliche Intelligenz – Traum und Wirklichkeit
Künstliche Intelligenz – Traum und Wirklichkeit
 
Multi-Modal Voice Development with Amazon Alexa
Multi-Modal Voice Development with Amazon AlexaMulti-Modal Voice Development with Amazon Alexa
Multi-Modal Voice Development with Amazon Alexa
 

Unit Testing einer Zend-Framework 2 Anwendung

  • 1. Ralf Eggert | Travello GmbH Unit Testing einer Zend-Framework-2-Anwendung
  • 2. Über Ralf Eggert • Dipl. Wirtschaftsinformatiker (FH) • Jahrgang 1972 • GF Travello GmbH • Buchautor zum ZF1 & ZF2 (AW / Galileo) • Kolumnist PHP-Magazin • ZF seit 2006 • Contributor, Speaker, Trainer, Papa • http://www.zendframeworkschulung.de/
  • 3. Drei Fragen an das Publikum? • Wer nutzt das Zend Framework 2? • Wer verwendet PHPUnit für Unit Tests? • Wer hat schon einmal testgetrieben entwickelt?
  • 5. PHPUnit über sich • »PHPUnit is the de-facto standard for unit testing in PHP projects. It provides both a framework that makes the writing of tests easy as well as the functionality to easily run the tests and analyse their results.« – Quelle: https://github.com/sebastianbergmann/phpunit/ • Autor: Sebastian Bergmann • Code-Coverage Reports • Datenbank Tests mit DbUnit • Stubs, Mocks, TDD, BDD, Logging, Selenium, ...
  • 6. PHPUnit Features • Assertions – $this->assertEquals('foo', $bar); – $this->assertContains('it', array('de', 'at', 'ch)); • Annotations – @codeCoverageIgnore – @expectedExceptionCode CustomerException – @group Customer • Fehlerbehandlung – PHP Exceptions – PHP Error
  • 7. Installation PHPUnit • PHP Archiv (PHAR) • Composer • PEAR • Optionale Pakete (Auswahl) – DbUnit – PHPUnit_Selenium – PHPUnit_Story (für Behavior-Driven Development) – PHPUnit_TicketListener für GitHub, Google Code usw.
  • 8. PHPUnit Shell • Tests ausführen – phpunit • Testausführung im JSON-Format loggen – phpunit --log-json • Code Coverage Report im HTML-Format – phpunit --coverage-html • Tests einer Gruppe ausführen – phpunit --group Customer • Hilfe anzeigen – phpunit --help
  • 9. Zend Framework 2 Quelle: Yathin S Krishnappa / wikimedia
  • 10. Zend Framework 2 über sich • »Zend Framework 2 is an open source framework for developing web applications and services using PHP 5.3+.« – Quelle: http://framework.zend.com/about/ • Aktuelles Release 2.2.4 • Durch Module erweiterbar • Erweiterbar durch eigene Features • Sicherheit, Performance & Enterprise Ready • Große Community
  • 11. Zend Framework 2 Features • Service-Manager • Event-Manager • Module-Manager • Konfiguration • MVC & RESTful Webservice • Native Unterstützung für diverse RDMS • Formulare, Input-Filter, Filter und Validatoren
  • 12. Aufgabe für Beispielprojekt • Kundenmodul auf ZF2-Basis entwickeln • Keine Abhängigkeit zu anderen Modulen • Modelinfrastruktur mit ZF2-Komponenten umsetzen • Kunden anlegen, ändern, löschen und anzeigen • Hohe Testabdeckung durch TDD erreichen • PHPUnit für Unit-Tests einsetzen • DbUnit für Integrationstests einsetzen
  • 15. Installation Beispielprojekt • Projekt installieren – https://github.com/RalfEggert/ipc2013-testing – Per git clone – git checkout 01_success • Composer starten – php composer.phar selfupdate – php composer.phar install • Virtual Host »ipc2013.testing« einrichten • Im Browser aufrufen – http://ipc2013.testing
  • 18. Ausgangslage • Branch 01_success • Modul Application stellt ZF2 Anwendung bereit • Leeres Modul Customer angelegt und aktiviert
  • 19. Setup • Branch 02_setup • PHPUnit in composer.json aufgenommen • Verzeichnis /tests im Customer Modul erstellt – phpunit.xml – Bootstrap.php • Test-Konfiguration eingerichtet • Verzeichnis /tests/CustomerTest erstellt – Erster Unit-Test zum Testen des Moduls
  • 21. Action-Controller testen • Branches 03_01_failing bis 03_04_success • Testet ob Modul Startseite abrufbar ist • Konfiguration Routing, Controller, View-Manager • IndexController mit indexAction() • View-Skript • Module.php – Konfiguration laden – Autoloading
  • 22. Kunden als Entitäten modellieren Quelle: RainerSturm / pixelio.de
  • 23. CustomerEntity testen • Branches 04_01_failing bis 04_04_success • Testet ob CustomerEntity existiert und über Getter- und Setter-Methoden verfügt • CustomerEntity anlegen – Private Eigenschaften – Setter-Methoden – Getter-Methoden
  • 24. Hydrator einrichten Quelle: Andreas Hermsdorf / pixelio.de
  • 25. CustomerHydrator testen • Branches 05_01_failing bis 05_04_success • Testet ob CustomerHydrator existiert • Testet ob Daten einer CustomerEntity als Array zurückgegeben werden • Testen ob CustomerEntity mit Array-Daten befüllt werden können • CustomerHydrator anlegen – Erweitert ZendStdlibHydratorClassMethods
  • 27. CustomerTable testen 1 • Branches 06_01_failing bis 06_08_success • Testet ob CustomerTable existiert und der richtigen Datenbanktabelle zugeordnet ist • Testet Resultset-Prototyp für CustomerEntity • Testet Methode zum Laden aller Kunden • Testet Methode zum Laden eines Kunden • CustomerTable anlegen – Erweitert ZendDbTableGatewayTableGateway – Implementiert Konstruktor und benötigte Methoden
  • 28. CustomerTable testen 2 • Branches 07_01_failing bis 07_04_success • Testet Anbindung von CustomerTable an eine Datenbank mit DbUnit • Testet lesende und schreibende Methoden • CustomerTable erweitern – Erweitert Methode zum Lesen aller Kunden – Methoden zum Anlegen, Ändern und Löschen
  • 30. CustomerInputFilter testen • Branches 08_01_failing bis 08_04_success • Testet ob CustomerInputFilter existiert • Testet InputFilter mit gültigen Daten • Testen InputFilter mit ungültigen Daten und prüft Fehlermeldungen • CustomerInputFilter anlegen – Erweitert ZendInputFilterInputFilter – Fügt Input Elemente mit Filtern und Validatoren hinzu
  • 32. CustomerForm testen • Branches 09_01_failing bis 09_05_success • Testet ob CustomerForm existiert • Testet ob alle Elemente vorhanden sind • Testen Übergabe von Array-Daten • CustomerForm anlegen – Erweitert ZendFormForm – Fügt Formularelemente hinzu
  • 34. CustomerService testen 1 • Branches 10_01_failing bis 10_12_success • Testet ob CustomerService existiert • Testet Getter/Setter für TableGateway/InputFilter • Testet Lesen aller Kunden und eines Kunden • Testet Anlegen, Ändern und Löschen • CustomerService anlegen – Implementiert Setter/Getter – Implementiert lesende Methoden – Implementiert schreibende Methoden
  • 35. CustomerService testen 2 • Branches 11_01_failing bis 11_08_success • Testet Anbindung von CustomerService an eine Datenbank mit DbUnit • Testet lesende und schreibende Methoden • CustomerService erweitern – Erweitert Methoden zum Anlegen, Ändern und Löschen durch Zugriff auf Datenbank
  • 37. Action-Controller testen 2 • Branches 12_01_failing bis 12_11_success • Testet Getter/Setter für IndexController • Testet API für Anzeige der Kundenliste und eines Kunden • Testet Datenbankzugriff für Anzeige der Kundenliste und eines Kunden mit DbUnit • MVC erweitern – IndexController erweitern – View-Skripte anlegen / erweitern – Konfiguration Service-Manager mit Factories
  • 38. Action-Controller testen 3 • Branches 13_01_failing bis 13_14_success • Testet API für Anlegen, Ändern und Löschen von Kunden • Testet Datenbankzugriff für Anlegen, Ändern und Löschen von Kunden mit DbUnit • MVC erweitern – IndexController erweitern – View-Skripte anlegen / erweitern – Konfiguration Service-Manager mit Factories
  • 41. Ralf Eggert | Travello GmbH Vielen Dank für Ihre Aufmerksamkeit