SlideShare une entreprise Scribd logo
Tester votre application MVC Zend Framework Mickaël Perraud Contributeur Zend Framework Responsable documentation française
Qu'allons-nous voir ensemble ? Les bases du test unitaire
Les bases du test fonctionnel avec ZF
Quelques sujets de tests “avancés” avec ZF
Pourquoi tester ?
Simplifier la maintenance Tester les attentes souhaitées
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 Couverture du code exercée par les tests unitaires
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  … Les comportements définis
Des exemples de code de cas d'utilisation
Les attentes
Les frameworks de tests PHP PHPT Utilisé par PHP, PEAR et quelques librairies indépendantes SimpleTest Framework de test de type JUnit PHPUnit Framework de test de type Junit
Standard industriel  de fait
Les bases du test
Ecrire des tests unitaires Créez une classe de test
Créez une ou deux méthodes qui décrivent des comportements Énoncez les comportements dans un langage naturel Écrivez le code qui crée le(s) comportement(s) Écrivez le code exerçant l'API Écrivez les assertions indiquant les attentes
Création d'une classe de test Habituellement nommé par le nom de classe à tester suivi de Test class  EntryTest    extends  PHPUnit_Framework_TestCase { }
Créez une méthode qui décrit un comportement Préfixé avec “test” 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 Echec ? Vérifiez vos tests et vos assertions en cas d'éventuelles fautes typographiques ou d'erreurs  d'utilisation
Vérifiez que le code que vous testez ne contient pas d'erreurs
Faîtes les corrections et relancez les tests Succès ? Passez au comportement ou à la fonctionnnalité suivante !
Un peu de terminologie associée aux tests
Scaffolding (“échaffaudage”) des tests Vérifiez que votre environnement est indépendant de toute hypothèse
Initialisez les dépendances nécessaires avant de lancer les tests
Habituellement réalisé dans la méthode “setUp()”
Doublures de test Stubs Remplacement d'un objet par un autre afin que le système puisse continuer son exécution.
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 Test conditionnel Le test ne s'exécute que si des conditions sont respectées.
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 Préparation de l'environnement de PHPUnit
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 Structure des répertoires tests |-- application |  `-- controllers |-- Bootstrap.php |-- library |  `-- Mkk `-- phpunit.xml 4 dossiers, 2 fichiers
L'environnement PHPUnit Le fichier phpunit.xml <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 Le fichier Bootstrap.php $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 En étendant Zend_Test_PHPUnit_ControllerTestCase class   ExempleControllerTest extends   Zend_Test_PHPUnit_ControllerTestCase { }
Amorçage de l'application Création d'une instance de Zend_Application, et référencement de celle-ci dans votre méthode setUp() 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 Méthode simple : on distribue une “url” class   ExempleControllerTest extends   Zend_Test_PHPUnit_ControllerTestCase { // ... public function   testPageStatiqueAUneBonneStructure() { $this ->dispatch( '/exemple/page' ); // ... } }
Création et distribution d'une requête Méthode avancée : on personnalise l'objet de requête avant la distribution 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 Les assertions concernent typiquement : La structure des balises de la réponse  Soit en utilisant des sélecteurs CSS ou par une recherche XPath.
Les entêtes de réponse HTTP ou le code de statut
Les éléments de l'objet Request et/ou Response

Contenu connexe

PDF
Testacular
PDF
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
PDF
La référence Clear php
PPT
Introduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINE
PPT
PHP 5.3, PHP Next
PDF
Tests de performances d'une application Java EE
PPT
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
PDF
PHP 7 et Symfony 3
Testacular
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
La référence Clear php
Introduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINE
PHP 5.3, PHP Next
Tests de performances d'une application Java EE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
PHP 7 et Symfony 3

Tendances (11)

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

En vedette (20)

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

Similaire à Tester les applications Zend Framework (20)

PDF
Service WEB de type REST avec Java
PDF
Services rest & jersey
PPT
Quoi de neuf dans Zend Framework 1.10 ?
PPT
Java Database Connectivity
PPT
Java 5, un blian
PPT
Java 5, un bilan
PPTX
JSTLcourensatangerpourlesetudiantsdu2emeanneeecole.pptx
PPT
Introductions Aux Servlets
PPT
PPS
Formation tests decembre2010
PPT
Présentation de JavaServer Faces
PPT
Prsentation de-javaserver-faces4124
PPT
Presentation Spring, Spring MVC
ODP
Tirer parti des décorateurs de Zend_Form
PPT
Présentation jQuery pour débutant
PPTX
Les tests comportementaux avec aspnet core
PPT
Dynamic Languages
ODP
ZendFramework2 - Présentation
PPT
Les Servlets et JSP
Service WEB de type REST avec Java
Services rest & jersey
Quoi de neuf dans Zend Framework 1.10 ?
Java Database Connectivity
Java 5, un blian
Java 5, un bilan
JSTLcourensatangerpourlesetudiantsdu2emeanneeecole.pptx
Introductions Aux Servlets
Formation tests decembre2010
Présentation de JavaServer Faces
Prsentation de-javaserver-faces4124
Presentation Spring, Spring MVC
Tirer parti des décorateurs de Zend_Form
Présentation jQuery pour débutant
Les tests comportementaux avec aspnet core
Dynamic Languages
ZendFramework2 - Présentation
Les Servlets et JSP

Tester les applications Zend Framework