SlideShare une entreprise Scribd logo
1  sur  55
Tester votre application MVC Zend Framework Mickaël Perraud Contributeur Zend Framework Responsable documentation française
Qu'allons-nous voir ensemble ? ,[object Object]
Les bases du test fonctionnel avec ZF
Quelques sujets de tests “avancés” avec ZF
Pourquoi tester ?
Simplifier la maintenance ,[object Object]
Tester les comportements décrits et identifiés dans l'application
Tester nous informe quand des changements cassent du code ou des comportements existants
Quantifer la qualité du code ,[object Object]
Tester les méthodes documente les comportements que le code devrait définir
Bénéfices psychologiques On se sent toujours mieux quand on voit du vert
Tester n'est pas ... recharger
Tester n'est pas  …  var_dump()
Tester est  …  reproductible
Tester est  …  automatisable
Les bons tests incluent  … ,[object Object]
Des exemples de code de cas d'utilisation
Les attentes
Les frameworks de tests PHP ,[object Object]
Standard industriel  de fait
Les bases du test
Ecrire des tests unitaires ,[object Object]
Créez une ou deux méthodes qui décrivent des comportements ,[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],class  EntryTest    extends  PHPUnit_Framework_TestCase { }
[object Object],[object Object],class   EntryTest     extends   PHPUnit_Framework_TestCase { public function   testMaySetTimestampWithString() { } }
Ecriture du code qui crée le comportement class  EntryTest   extends  PHPUnit_Framework_TestCase { public function   testMaySetTimestampWithString() { $string   =   'Fri, 7 May 2010 09:26:03 -0700' ; $ts   =   strtotime( $string ); $this ->entry->setTimestamp( $string ); $setValue   =   $this ->entry->getTimestamp(); } }
Ecriture des assertions qui vérifient les attentes class  EntryTest    extends  PHPUnit_Framework_TestCase { public function   testMaySetTimestampWithString() { $string   =   'Fri, 7 May 2010 09:26:03 -0700' ; $ts   =   strtotime( $string ); $this ->entry->setTimestamp( $string ); $setValue   =   $this ->entry->getTimestamp(); $this ->assertSame( $ts ,   $setValue ); } }
Lancement des tests ,[object Object]
Vérifiez que le code que vous testez ne contient pas d'erreurs
Faîtes les corrections et relancez les tests ,[object Object],[object Object]
Un peu de terminologie associée aux tests
Scaffolding (“échaffaudage”) des tests ,[object Object]
Initialisez les dépendances nécessaires avant de lancer les tests
Habituellement réalisé dans la méthode “setUp()”
Doublures de test ,[object Object]
Mock Objects Remplacement d'un objet par un autre en redéfinissant ce qu'on attend de lui.
“ Mocks Aren't Stubs”  (Martin Fowler) =>  http://bruno-orsier.developpez.com/mocks-arent-stubs/
Autres types de tests ,[object Object]
Tests fonctionnels et d'intégration On teste que le système est conforme à ce que l'on attend ; on teste ensuite que l'on interagit correctement avec lui.
Tests quasi-fonctionnel avec Zend Framework
Vue d'ensemble ,[object Object]
Création d'un TestCase basé sur ControllerTestCase
Amorçage (“bootstrap”) de l'application
Création et distribution (“dispatch”) de la requête
Réalisation des assertions sur la réponse
L'environnement PHPUnit ,[object Object],tests |-- application |  `-- controllers |-- Bootstrap.php |-- library |  `-- Mkk `-- phpunit.xml 4 dossiers, 2 fichiers
L'environnement PHPUnit ,[object Object],<phpunit   bootstrap = &quot;./Bootstrap.php&quot; > <testsuite   name = &quot;Suite de tests&quot; > <directory> ./ </directory> </testsuite> <filter> <whitelist> <directory     suffix = &quot;.php&quot; > ../library/ </directory> <directory     suffix = &quot;.php&quot; > ../application/ </directory> <exclude> <directory     suffix = &quot;.phtml&quot; > ../application/ </directory> </exclude> </whitelist> </filter> </phpunit>
L'environnement PHPUnit ,[object Object],$rootPath   =   realpath(dirname(__DIR__)); if   (!defined( 'APPLICATION_PATH' )) { define( 'APPLICATION_PATH' ,     $rootPath   .   '/application' ); } if   (!defined( 'APPLICATION_ENV' )) { define( 'APPLICATION_ENV' ,   'testing' ); } set_include_path(implode(PATH_SEPARATOR,   array ( '.' , $rootPath   .   '/library' , get_include_path(), ))); require_once   'Zend/Loader/Autoloader.php' ; $loader   =   Zend_Loader_Autoloader::getInstance(); $loader ->registerNamespace( 'Mkk_' );
Création d'une classe de test ,[object Object],class   ExempleControllerTest extends   Zend_Test_PHPUnit_ControllerTestCase { }
Amorçage de l'application ,[object Object],class   ExampleControllerTest extends   Zend_Test_PHPUnit_ControllerTestCase { public function   setUp() { $this ->bootstrap   =   new   Zend_Application( APPLICATION_ENV, APPLICATION_PATH     .   '/configs/application.ini' ); parent::setUp(); } }
Création et distribution d'une requête ,[object Object],class   ExempleControllerTest extends   Zend_Test_PHPUnit_ControllerTestCase { // ... public function   testPageStatiqueAUneBonneStructure() { $this ->dispatch( '/exemple/page' ); // ... } }
Création et distribution d'une requête ,[object Object],class   ExempleControllerTest extends   Zend_Test_PHPUnit_ControllerTestCase { // ... public function   testRequeteXhrRetourneJson() { $this ->getRequest() ->setHeader( 'X-Requested-With' ,   'XMLHttpRequest' ) ->setQuery( 'format' ,   'json' ); $this ->dispatch( '/exemple/xhr-endpoint' ); // ... } }
Création des assertions ,[object Object]
Les entêtes de réponse HTTP ou le code de statut
Les éléments de l'objet Request et/ou Response

Contenu connexe

Tendances

Tendances (11)

Formation PHP
Formation PHPFormation PHP
Formation PHP
 
Migration PHP4-PHP5
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5
 
PHP 7.0 : aperçu des nouveautés
PHP 7.0 : aperçu des nouveautésPHP 7.0 : aperçu des nouveautés
PHP 7.0 : aperçu des nouveautés
 
Nouveautés php 7
Nouveautés php 7Nouveautés php 7
Nouveautés php 7
 
Mesurer la performance dans le milieu hostile du développement Java
Mesurer la performance dans le milieu hostile du développement JavaMesurer la performance dans le milieu hostile du développement Java
Mesurer la performance dans le milieu hostile du développement Java
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
 
PHP 1 - Apprendre les bases
PHP 1 - Apprendre les basesPHP 1 - Apprendre les bases
PHP 1 - Apprendre les bases
 
Jstl : Java server page Standard Tag Library
Jstl : Java server page Standard Tag LibraryJstl : Java server page Standard Tag Library
Jstl : Java server page Standard Tag Library
 
Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 
.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP
 

En vedette

Community management 101
Community management 101Community management 101
Community management 101
coursinis
 
Boceto de power point eneidi
Boceto de power point eneidiBoceto de power point eneidi
Boceto de power point eneidi
eneidiyudith
 
Generacion 3.5 g maria guerra 11
Generacion 3.5 g maria guerra 11Generacion 3.5 g maria guerra 11
Generacion 3.5 g maria guerra 11
alexxtt nova
 
Développement sécurisé d'applications avec Zend Framework
Développement sécurisé d'applications avec Zend FrameworkDéveloppement sécurisé d'applications avec Zend Framework
Développement sécurisé d'applications avec Zend Framework
Mickael Perraud
 
Ley de-protección-del-emblema-y-el-nombre-de-la-cruz-roja-(1)
Ley de-protección-del-emblema-y-el-nombre-de-la-cruz-roja-(1)Ley de-protección-del-emblema-y-el-nombre-de-la-cruz-roja-(1)
Ley de-protección-del-emblema-y-el-nombre-de-la-cruz-roja-(1)
Save Solutions
 
Ley de-fomento-de-teatros-y-cines
Ley de-fomento-de-teatros-y-cinesLey de-fomento-de-teatros-y-cines
Ley de-fomento-de-teatros-y-cines
Save Solutions
 
Formazione Portogallo (fr)
Formazione Portogallo (fr)Formazione Portogallo (fr)
Formazione Portogallo (fr)
Pop Apps
 
Ley de-derechos-por-los-servicios-de-la-direccion-general-de-urbanismo-y-arqu...
Ley de-derechos-por-los-servicios-de-la-direccion-general-de-urbanismo-y-arqu...Ley de-derechos-por-los-servicios-de-la-direccion-general-de-urbanismo-y-arqu...
Ley de-derechos-por-los-servicios-de-la-direccion-general-de-urbanismo-y-arqu...
Save Solutions
 
Fatla BLOQUE0-PACIE
Fatla BLOQUE0-PACIEFatla BLOQUE0-PACIE
Fatla BLOQUE0-PACIE
savita85
 
Ley de-urbanismo-y-construccion
Ley de-urbanismo-y-construccionLey de-urbanismo-y-construccion
Ley de-urbanismo-y-construccion
Save Solutions
 
Informe de estado uno
Informe de estado unoInforme de estado uno
Informe de estado uno
Trevor Quick
 
Ley de-asociaciones-y-fundaciones-sin-fines-de-lucro
Ley de-asociaciones-y-fundaciones-sin-fines-de-lucroLey de-asociaciones-y-fundaciones-sin-fines-de-lucro
Ley de-asociaciones-y-fundaciones-sin-fines-de-lucro
Save Solutions
 
Conceptos basicos[1]
Conceptos basicos[1]Conceptos basicos[1]
Conceptos basicos[1]
Aura Pérez
 
Vorschriften und Fallstricke bei der Einverständniserklärung
Vorschriften und Fallstricke bei der EinverständniserklärungVorschriften und Fallstricke bei der Einverständniserklärung
Vorschriften und Fallstricke bei der Einverständniserklärung
Daniel, Hagelskamp & Kollegen
 

En vedette (20)

Zf2 ce-qui-va-changer
Zf2 ce-qui-va-changerZf2 ce-qui-va-changer
Zf2 ce-qui-va-changer
 
Le projet EcoOnto - avancees.
Le projet EcoOnto  - avancees.Le projet EcoOnto  - avancees.
Le projet EcoOnto - avancees.
 
Community management 101
Community management 101Community management 101
Community management 101
 
Boceto de power point eneidi
Boceto de power point eneidiBoceto de power point eneidi
Boceto de power point eneidi
 
Generacion 3.5 g maria guerra 11
Generacion 3.5 g maria guerra 11Generacion 3.5 g maria guerra 11
Generacion 3.5 g maria guerra 11
 
Développement sécurisé d'applications avec Zend Framework
Développement sécurisé d'applications avec Zend FrameworkDéveloppement sécurisé d'applications avec Zend Framework
Développement sécurisé d'applications avec Zend Framework
 
El Aborto
El AbortoEl Aborto
El Aborto
 
Ley de-protección-del-emblema-y-el-nombre-de-la-cruz-roja-(1)
Ley de-protección-del-emblema-y-el-nombre-de-la-cruz-roja-(1)Ley de-protección-del-emblema-y-el-nombre-de-la-cruz-roja-(1)
Ley de-protección-del-emblema-y-el-nombre-de-la-cruz-roja-(1)
 
Groupe Launch brochure_Francais
Groupe Launch brochure_FrancaisGroupe Launch brochure_Francais
Groupe Launch brochure_Francais
 
Ley de-fomento-de-teatros-y-cines
Ley de-fomento-de-teatros-y-cinesLey de-fomento-de-teatros-y-cines
Ley de-fomento-de-teatros-y-cines
 
Formazione Portogallo (fr)
Formazione Portogallo (fr)Formazione Portogallo (fr)
Formazione Portogallo (fr)
 
Ley de-derechos-por-los-servicios-de-la-direccion-general-de-urbanismo-y-arqu...
Ley de-derechos-por-los-servicios-de-la-direccion-general-de-urbanismo-y-arqu...Ley de-derechos-por-los-servicios-de-la-direccion-general-de-urbanismo-y-arqu...
Ley de-derechos-por-los-servicios-de-la-direccion-general-de-urbanismo-y-arqu...
 
Fatla BLOQUE0-PACIE
Fatla BLOQUE0-PACIEFatla BLOQUE0-PACIE
Fatla BLOQUE0-PACIE
 
Edi
EdiEdi
Edi
 
Ley de-urbanismo-y-construccion
Ley de-urbanismo-y-construccionLey de-urbanismo-y-construccion
Ley de-urbanismo-y-construccion
 
Informe de estado uno
Informe de estado unoInforme de estado uno
Informe de estado uno
 
Ley de-asociaciones-y-fundaciones-sin-fines-de-lucro
Ley de-asociaciones-y-fundaciones-sin-fines-de-lucroLey de-asociaciones-y-fundaciones-sin-fines-de-lucro
Ley de-asociaciones-y-fundaciones-sin-fines-de-lucro
 
Primera evaluacion
Primera evaluacionPrimera evaluacion
Primera evaluacion
 
Conceptos basicos[1]
Conceptos basicos[1]Conceptos basicos[1]
Conceptos basicos[1]
 
Vorschriften und Fallstricke bei der Einverständniserklärung
Vorschriften und Fallstricke bei der EinverständniserklärungVorschriften und Fallstricke bei der Einverständniserklärung
Vorschriften und Fallstricke bei der Einverständniserklärung
 

Similaire à Tester les applications Zend Framework

Introductions Aux Servlets
Introductions Aux ServletsIntroductions Aux Servlets
Introductions Aux Servlets
François Charoy
 
Formation tests decembre2010
Formation tests decembre2010Formation tests decembre2010
Formation tests decembre2010
Fou Cha
 
Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124
Mejdeddine Bouzouita
 
Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVC
Nathaniel Richand
 

Similaire à Tester les applications Zend Framework (20)

Service WEB de type REST avec Java
Service WEB de type REST avec JavaService WEB de type REST avec Java
Service WEB de type REST avec Java
 
Spring 3.0
Spring 3.0Spring 3.0
Spring 3.0
 
Services rest & jersey
Services rest & jerseyServices rest & jersey
Services rest & jersey
 
Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?
 
Java Database Connectivity
Java Database ConnectivityJava Database Connectivity
Java Database Connectivity
 
Java 5, un blian
Java 5, un blianJava 5, un blian
Java 5, un blian
 
Java 5, un bilan
Java 5,  un bilanJava 5,  un bilan
Java 5, un bilan
 
Introductions Aux Servlets
Introductions Aux ServletsIntroductions Aux Servlets
Introductions Aux Servlets
 
Applets
AppletsApplets
Applets
 
Formation tests decembre2010
Formation tests decembre2010Formation tests decembre2010
Formation tests decembre2010
 
Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124
 
Présentation de JavaServer Faces
Présentation de JavaServer FacesPrésentation de JavaServer Faces
Présentation de JavaServer Faces
 
Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVC
 
Tirer parti des décorateurs de Zend_Form
Tirer parti des décorateurs de Zend_FormTirer parti des décorateurs de Zend_Form
Tirer parti des décorateurs de Zend_Form
 
Présentation jQuery pour débutant
Présentation jQuery pour débutantPrésentation jQuery pour débutant
Présentation jQuery pour débutant
 
Les tests comportementaux avec aspnet core
Les tests comportementaux avec aspnet coreLes tests comportementaux avec aspnet core
Les tests comportementaux avec aspnet core
 
Dynamic Languages
Dynamic LanguagesDynamic Languages
Dynamic Languages
 
ZendFramework2 - Présentation
ZendFramework2 - PrésentationZendFramework2 - Présentation
ZendFramework2 - Présentation
 
Les Servlets et JSP
Les Servlets et JSPLes Servlets et JSP
Les Servlets et JSP
 
Coat::Persistent at FPW2009
Coat::Persistent at FPW2009Coat::Persistent at FPW2009
Coat::Persistent at FPW2009
 

Tester les applications Zend Framework