Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Tests unitaires et fonctionnels avec symfony 1.4

ubermuda
November 06, 2009

Tests unitaires et fonctionnels avec symfony 1.4

ubermuda

November 06, 2009
Tweet

More Decks by ubermuda

Other Decks in Technology

Transcript

  1. Titre présentation | Conférencier Tests unitaires et fonctionnels avec Symfony

    1.2 Geoffrey Bachelet - Hugo Hamon vendredi 12 juin 2009
  2. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Qui sommes-nous ? • Geoffrey Bachelet • Hugo Hamon vendredi 12 juin 2009
  3. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Au sommaire... • Introduction aux tests automatisés • Les tests unitaires • Les tests fonctionnels • Introduction à l’intégration continue vendredi 12 juin 2009
  4. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Introduction aux tests automatisés vendredi 12 juin 2009
  5. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Introduction aux tests automatisés • 2 sortes : unitaires et fonctionnels (recette) • Intégrés dans les méthodes agiles (XP) vendredi 12 juin 2009
  6. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Ils sont les garants... • du bon fonctionnement du code, • sa robustesse, • sa maintenabilité, • son évolutivité, • sa pérennité, • de la qualité globale du code / application vendredi 12 juin 2009
  7. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Les tests unitaires vendredi 12 juin 2009
  8. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Définition « En programmation informatique, le test unitaire est un procédé permettant de s’assurer du fonctionnement correct d’une partie déterminée d’un logiciel ou d’une portion d’un programme » Wikipédia vendredi 12 juin 2009
  9. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    La règle F.I.R.S.T • Fast • Independant • Repeatable • Self-Validating • Timely vendredi 12 juin 2009
  10. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Les avantages • valider le fonctionnement • éviter les régressions fonctionnelles • découvrir des bugs • faciliter le refactoring vendredi 12 juin 2009
  11. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Les avantages • documenter le code • faciliter les migrations • structurer le développement • rentabiliser à moyen terme vendredi 12 juin 2009
  12. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Avoir confiance en son code ! vendredi 12 juin 2009
  13. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Les contraintes • les tests sont coûteux ! • savoir tester l’essentiel • maintenir la suite de tests à 100% • écrire des tests en permanence vendredi 12 juin 2009
  14. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Les contraintes Les tests impliquent de la rigueur ! vendredi 12 juin 2009
  15. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Quand tester du code ? • avant l’implémentation (TDD) • après l’implémentation • à la correction d’un bug • tester continuellement est la clé ! vendredi 12 juin 2009
  16. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Que faut-il tester ? • les classes du modèle (classes et méthodes) • les bibliothèques utilisateurs (fonctions) • les inclusions de fichiers • Ne pas tester du code déjà testé ! vendredi 12 juin 2009
  17. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Ayez une approche pragmatique ! vendredi 12 juin 2009
  18. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    L’approche pragmatique • tester les méthodes et fonctions critiques • tester quand un bug est découvert • => peu de tests valent toujours mieux que rien ! vendredi 12 juin 2009
  19. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Les outils de test en PHP SnapTest Testilence Lime vendredi 12 juin 2009
  20. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Lime • Adaptation du module Perl Test::More • Conforme au standard Test Anything Protocol • API simple et testée • Exécute les tests dans des processus séparés vendredi 12 juin 2009
  21. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Test Anything Protocol • Créé en 1987 • Procédure de standardisation IETF (2008) • Basé sur le module Perl Test::Harness • Spécification de-facto • Format de sortie des tests standardisé vendredi 12 juin 2009
  22. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    L’environnement de test • Il doit être unique • Réinitialisé pour chaque suite de tests • Différent de l’environnement de production !!! vendredi 12 juin 2009
  23. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Les données de test : fixtures • Chargées en BDD à chaque exécution • Fichiers YAML dans test/fixtures • 1 fichier par modèle • Fichiers préfixés par un numéro vendredi 12 juin 2009
  24. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Le répertoire test/fixtures vendredi 12 juin 2009
  25. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Exécuter des suites de tests • php symfony test:all • php symfony test:unit • php symfony test:unit testFile • php symfony test:functional frontend • php symfony test:functional frontend testFile • php test/unit/testFileTest.php • php test/functional/frontend/testFileTest.php vendredi 12 juin 2009
  26. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Exemple pratique (TDD) Tester une méthode de classe vendredi 12 juin 2009
  27. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Le modèle Product vendredi 12 juin 2009
  28. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Le modèle ProductLine vendredi 12 juin 2009
  29. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Tester la méthode getTotalPrice() vendredi 12 juin 2009
  30. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Tester la méthode getTotalPrice() vendredi 12 juin 2009
  31. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Un bug est découvert... vendredi 12 juin 2009
  32. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Le test confirme le bug ! vendredi 12 juin 2009
  33. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Validation par les tests vendredi 12 juin 2009
  34. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Tester des objets Doctrine vendredi 12 juin 2009
  35. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Tester des objets Doctrine vendredi 12 juin 2009
  36. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Les objets Mock • Simuler une fonctionnalité • S'abstraire du contexte réel (webservices, bases de données, système de fichiers) • S'abstraire des dépendances vendredi 12 juin 2009
  37. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Les objets Mock - Exemple 1 • Fixation des droits d’accès de l’utilisateur vendredi 12 juin 2009
  38. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Les objets Mock - Exemple 2 • Simuler une fonctionnalité vendredi 12 juin 2009
  39. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Les objets Mock - Exemple 2 vendredi 12 juin 2009
  40. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Quelques pièges à éviter... • sfContext • sfConfig • Dépendances dures vendredi 12 juin 2009
  41. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    sfContext dans le modèle vendredi 12 juin 2009
  42. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    sfContext dans le modèle vendredi 12 juin 2009
  43. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    sfContext dans le modèle vendredi 12 juin 2009
  44. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    sfConfig dans le modèle vendredi 12 juin 2009
  45. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    sfConfig dans le modèle vendredi 12 juin 2009
  46. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    sfConfig dans le modèle vendredi 12 juin 2009
  47. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    La couverture de code • Requiert l’extension xdebug • apt-get install php5-xdebug • pecl install xdebug • http://pecl.php.net/package/Xdebug vendredi 12 juin 2009
  48. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    La couverture de code • Par bibliothèque • symfony test:coverage test/unit lib/ • symfony test:coverage test/unit/myLibTest.php lib/myLib.php • Par projet • symfony test:coverage test/ . vendredi 12 juin 2009
  49. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Les tests fonctionnels vendredi 12 juin 2009
  50. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Objectif des tests fonctionnels • Tester les fonctionnalités de l’application • Introspecter tous les objets du framework • Documenter un scénario d’utilisation vendredi 12 juin 2009
  51. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Les limites des tests fonctionnels • Limités à l’environnement Symfony, • Les JavaScript ne sont pas testables, • Ne permettent pas de tester le rendu «visuel», • Ne remplacent pas des tests Sélénium vendredi 12 juin 2009
  52. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    L’objet sfBrowser • Simule le comportement d’un navigateur web • Rend les objets du framework disponibles de la requête à la réponse • Ne nécessite pas de serveur web • Embarque lime vendredi 12 juin 2009
  53. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Configurer le navigateur de test setHttpHeader() Fixe un en-tête HTTP setAuth() Définit les droits d’accès basiques setCookie() Fixe un cookie removeCookie() Supprime un cookie clearCookies() Supprime tous les cookies courants followRedirect() Suit la redirection déclenchée vendredi 12 juin 2009
  54. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Simuler la navigation get() Simule une requête GET post() Simule une requête POST call() Simule une requête PUT ou DELETE back() Retourne à la page précédente de l’historique de navigation forward() Avance d’une page dans l’historique de navigation reload() Recharge la page courante click() Simule un clic sur un lien ou un bouton de formulaire select() Sélectionne un bouton radio ou une case à cocher deselect() Désélectionne un bouton radio ou une case à cocher restart() Réinitialise tous les paramètres du navigateur vendredi 12 juin 2009
  55. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    • Embarque sfBrowser • API fluide et lisible • Extensible • Délègue les tests aux «testeurs» L’objet sfTestFunctional vendredi 12 juin 2009
  56. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Une API fluide et lisible vendredi 12 juin 2009
  57. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Une API extensible - Exemple 1 vendredi 12 juin 2009
  58. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Une API extensible - Exemple 2 vendredi 12 juin 2009
  59. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Une API extensible - Exemple 2 vendredi 12 juin 2009
  60. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Les blocs de tests vendredi 12 juin 2009
  61. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Les objets testeurs • sfTesterRequest • sfTesterResponse (CSS 3 selectors - xPath en symfony 1.3) • sfTesterForm • sfTesterUser • sfTesterViewCache • sfTesterDoctrine • sfTesterPropel vendredi 12 juin 2009
  62. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Créer des objets testeurs vendredi 12 juin 2009
  63. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Créer des objets testeurs vendredi 12 juin 2009
  64. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Créer des objets testeurs vendredi 12 juin 2009
  65. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Tests dans les plugins vendredi 12 juin 2009
  66. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Tests dans les plugins • sfTaskExtraPlugin – http://www.symfony-project/plugins/sfTaskExtraPlugin – Créé par Kris Wallsmith (core team) • symfony generate:plugin sfMyPlugin – Structure de base du plug-in – Bootstraps de tests – Fixtures pour les tests fonctionnels vendredi 12 juin 2009
  67. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Tests dans les plugins • php symfony test:plugin sfFooPlugin • php symfony test:plugin --only=unit sfFooPlugin • php symfony test:plugin --only=functional sfFooPlugin vendredi 12 juin 2009
  68. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Tests unitaires vs Tests de recette vendredi 12 juin 2009
  69. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Introduction à l’intégration continue • Exécution des tests • Rapport d’erreur • Build du projet • Automatique ! vendredi 12 juin 2009
  70. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    L’intégration continue - Pourquoi ? 1.Contrôler les régressions 2.Valider les fonctionnalités vendredi 12 juin 2009
  71. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    L’intégration continue • Les régressions – corrigées par les développeurs • Les fonctionnalités – vérifiées par le client vendredi 12 juin 2009
  72. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    L’intégration continue - Outils • CruiseControl (Java) • Hudson (Java) • Xinc (PHP) • phpUnderControl (PHP) • symfonyUnderControl (phpUnderControl) • sismo vendredi 12 juin 2009
  73. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    sismo • Développé par Fabien Potencier • http://ci.symfony-project.org/ vendredi 12 juin 2009
  74. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    sismo • Développé par Fabien Potencier • http://ci.symfony-project.org/ vendredi 12 juin 2009
  75. Tests unitaires et fonctionnels | Geoffrey Bachelet - Hugo Hamon

    Merci ! Des questions ? vendredi 12 juin 2009