SlideShare une entreprise Scribd logo
Les tests en PHP
avec PHPUnit
Tests automatisés
Tests unitaires (structurels)
S’assurer de l’intégrité et du bon fonctionnement du code source.
Outils : PHPUnit / Atoum
Tests fonctionnels
Vérifier le comportement métier d’une application.
Outils : Selenium
Tests de spécifications (comportement)
Contrôler qu’une application correspond au besoin formulé par le client.
Outils : Behat / PHPSpec
Tests unitaires
Les tests unitaires permettent de valider que le code développé est conforme aux intentions du développeur. Une unité
représente une classe et ses méthodes.
Ces tests doivent être répétables, automatiques, indépendants et rapides.
Michaël Feathers définit dans Working Effectively With Legacy Code un test unitaire de la façon suivante :
Il ne communique pas avec la base de données
Il ne communique pas avec d’autres ressources sur le réseau
Il ne manipule pas un ou plusieurs fichiers
Il peut s’exécuter en même temps que les autres tests unitaires
On ne doit pas faire quelque chose de spécial, comme éditer un fichier de configuration, pour l’exécuter
Tests fonctionnels
Les tests fonctionnels permettent de tester l’intégration des différentes couches applicatives.
Ils aident également à tester qu’une nouvelle fonctionnalité n’est pas la source d’une régression fonctionnelle.
Workflow standard
Envoi d’une requête HTTP
Test de la réponse
Clic sur un lien ou envoi d’un formulaire
Test de la réponse
Nettoyer et recommencer
Tests de spécifications
Les tests de spécifications sont des tests fonctionnels avec un formalisme.
Cette méthodologie a pour objectif d’améliorer la compréhension et la collaboration du métier, du Product Owner, des
développeurs, des testeurs et de toute autre partie prenante.
Les tests d’acceptance sont écrits par les PO, à l’aide du langage Gherkin.
Exemple de description du comportement de la demande :
Scenario: Searching for a page that does exist
Given I am on "/wiki/Main_Page"
When I fill in "search" with "Behavior Driven Development"
And I press "searchButton"
Then I should see "agile software development"
PHPUnit
PHPUnit est un framework open source de tests unitaires.
https://github.com/sebastianbergmann/phpunit
Créé en 2004 par Sebastian Bergmann, il est maintenant devenu un standard :
Intégré à de nombreux frameworks
Installable en standalone avec composer
Il est possible d’effectuer des tests fonctionnels avec Symfony (Web Test Case) et d’autres frameworks PHP, comme
Laravel.
PHPUnit utilise massivement des tags PHPDoc personnalisés (de manière toujours optionnelle).
Écrire des tests
Assertions principales
- assertTrue()
- assertEquals()
- assertContains()
- assertCount()
- assertEmpty()
- assertInstanceOf()
- assertNull()
Annotations principales
- @expectedException : vérifier qu’une exception est
lancée.
- @dataProvider : fournir plusieurs jeux de données
afin d’éviter la duplication de méthodes de test.
<?php
use PHPUnitFrameworkTestCase;
class DataTest extends TestCase
{
/** @dataProvider additionProvider */
public function testAdd($a, $b, $expected)
{
$this->assertEquals($expected, $a + $b);
}
public function additionProvider()
{
return [
[0, 0, 0],
[0, 1, 1],
[1, 0, 1],
];
}
}
Le pattern Mock Object
Le pattern Mock Object permet d’isoler une ressource.
Mock : Faux objet. L’utilisation des mocks permet
également de simuler un appel de fonction plutôt que
l’exécuter. C’est par exemple utile pour simuler une
classe qui fait appel à une librairie extérieure.
Stub : Bouchon. C’est la valeur retournée lors de
l’appel à une méthode d’un objet mocké.
<?php
use PHPUnitFrameworkTestCase;
class StubTest extends TestCase
{
public function testStub()
{
// Create a stub for the SomeClass class.
$stub = $this->getMockBuilder($originalClassName)
->disableOriginalConstructor()
->getMock();
// Configure the stub.
$stub->method('doSomething')
->willReturn('foo');
// Calling $stub->doSomething() will now return 'foo'.
$this->assertEquals('foo', $stub->doSomething());
}
}
Base de données et fixtures
Fixtures : jeu de données contrôlées.
Dans un scénario, PHPUnit lance les méthodes dans l'ordre suivant :
1. setUpBeforeClass() : exécuté une fois en début de scénario
2. setUp() : exécuté avant chaque test du scénario : "constructeur"
d'environnement
3. assertPreConditions() : effectue des assertions sur l'état initial de
l'environnement du test à venir
4. testOne() : un premier test
5. testTwo() : un deuxième test
6. assertPostConditions() : effectue des assertions sur l'état de
l'environnement après le lancement d'un test
7. tearDown() : exécuté après chaque test du scénario : "destructeur"
d'environnement
8. tearDownAfterClass() : exécuté une fois en fin de de scénario
<?php
use PHPUnitFrameworkTestCase;
class StackTest extends TestCase {
protected $stack;
protected function setUp() {
$this->stack = [];
}
public function testEmpty() {
$this->assertTrue(empty($this->stack));
}
public function testPush() {
array_push($this->stack, 'foo');
$this->assertEquals('foo', $this->stack[count($this->stack)-1]);
$this->assertFalse(empty($this->stack));
}
public function testPop() {
array_push($this->stack, 'foo');
$this->assertEquals('foo', array_pop($this->stack));
$this->assertTrue(empty($this->stack));
}
}
Code coverage
La couverture de code montre le nombre de lignes de code sécurisées par des tests.
PHPunit permet de générer un rapport sur la couverture de code (nécessite l’activation de xdebug), permettant de montrer
les statistiques sur toutes les classes, méthodes et lignes couvertes par des tests.
$ bin/phpunit --coverage-html reports
Test Driven Development
Technique de développement logiciel au coeur des méthodes agiles telles que l'extreme programming.
Red - Green - Refactor Cycle
1. Red state : Déclarer et nommer un test, écrire l’assertion, le faire échouer
2. Green state : Faire passer le test au vert le plus tôt possible (quitte à faker)
3. Refactor state : Remanier le code (l’améliorer, le rendre plus lisible)

Contenu connexe

Tendances

Les tests behat par la pratique
Les tests behat par la pratiqueLes tests behat par la pratique
Les tests behat par la pratique
Guilhem Bourgoin
 
Les tableaux en Java
Les tableaux en JavaLes tableaux en Java
Les tableaux en Java
Wiki Info Systeme
 
Alphorm.com Formation Laravel : Construire une Application de A à Z
Alphorm.com Formation Laravel : Construire une Application de A à ZAlphorm.com Formation Laravel : Construire une Application de A à Z
Alphorm.com Formation Laravel : Construire une Application de A à Z
Alphorm
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSP
Youness Boukouchi
 
Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...
ECAM Brussels Engineering School
 
Exercice 1 java Héritage
Exercice 1 java HéritageExercice 1 java Héritage
Exercice 1 java Héritage
NadaBenLatifa
 
Examen principal - PHP
Examen principal - PHPExamen principal - PHP
Examen principal - PHP
Ines Ouaz
 
diagramme d'activité
diagramme d'activitédiagramme d'activité
diagramme d'activité
marwa baich
 
Uft Basics
Uft BasicsUft Basics
Uft Basics
Archana Krushnan
 
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniAtelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniShellmates
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
ENSET, Université Hassan II Casablanca
 
Polymorphisme (cours, résumé)
Polymorphisme (cours, résumé)Polymorphisme (cours, résumé)
Polymorphisme (cours, résumé)
Anis Bouhachem Djer
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
slimyaich3
 
CV de Mohammed Yamani
CV de Mohammed YamaniCV de Mohammed Yamani
CV de Mohammed Yamani
Mohammed YAMANI
 
JAVA
JAVAJAVA
Robot Framework Introduction
Robot Framework IntroductionRobot Framework Introduction
Robot Framework Introduction
Pekka Klärck
 
POO Java Chapitre 6 Exceptions
POO Java  Chapitre 6 ExceptionsPOO Java  Chapitre 6 Exceptions
POO Java Chapitre 6 Exceptions
Mouna Torjmen
 
Selenium Tutorial Java
Selenium Tutorial  JavaSelenium Tutorial  Java
Selenium Tutorial Java
Ahmed HARRAK
 
Java - implémentation des concepts objets
Java - implémentation des concepts objetsJava - implémentation des concepts objets
Java - implémentation des concepts objetsJean David Olekhnovitch
 

Tendances (20)

Les tests behat par la pratique
Les tests behat par la pratiqueLes tests behat par la pratique
Les tests behat par la pratique
 
Les tableaux en Java
Les tableaux en JavaLes tableaux en Java
Les tableaux en Java
 
Alphorm.com Formation Laravel : Construire une Application de A à Z
Alphorm.com Formation Laravel : Construire une Application de A à ZAlphorm.com Formation Laravel : Construire une Application de A à Z
Alphorm.com Formation Laravel : Construire une Application de A à Z
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSP
 
Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...
 
Exercice 1 java Héritage
Exercice 1 java HéritageExercice 1 java Héritage
Exercice 1 java Héritage
 
Examen principal - PHP
Examen principal - PHPExamen principal - PHP
Examen principal - PHP
 
diagramme d'activité
diagramme d'activitédiagramme d'activité
diagramme d'activité
 
Uft Basics
Uft BasicsUft Basics
Uft Basics
 
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniAtelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El Hassani
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
Polymorphisme (cours, résumé)
Polymorphisme (cours, résumé)Polymorphisme (cours, résumé)
Polymorphisme (cours, résumé)
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
CV de Mohammed Yamani
CV de Mohammed YamaniCV de Mohammed Yamani
CV de Mohammed Yamani
 
JAVA
JAVAJAVA
JAVA
 
Robot Framework Introduction
Robot Framework IntroductionRobot Framework Introduction
Robot Framework Introduction
 
POO Java Chapitre 6 Exceptions
POO Java  Chapitre 6 ExceptionsPOO Java  Chapitre 6 Exceptions
POO Java Chapitre 6 Exceptions
 
Selenium Tutorial Java
Selenium Tutorial  JavaSelenium Tutorial  Java
Selenium Tutorial Java
 
Java - implémentation des concepts objets
Java - implémentation des concepts objetsJava - implémentation des concepts objets
Java - implémentation des concepts objets
 
Presentation,PFE
Presentation,PFEPresentation,PFE
Presentation,PFE
 

En vedette

Elasticsearch
ElasticsearchElasticsearch
Elasticsearch
Jean-Philippe Chateau
 
assertYourself - Breaking the Theories and Assumptions of Unit Testing in Flex
assertYourself - Breaking the Theories and Assumptions of Unit Testing in FlexassertYourself - Breaking the Theories and Assumptions of Unit Testing in Flex
assertYourself - Breaking the Theories and Assumptions of Unit Testing in Flex
michael.labriola
 
Les outils d’automatisation de tests (scripting) : Adoption et enjeux (comple...
Les outils d’automatisation de tests (scripting) : Adoption et enjeux (comple...Les outils d’automatisation de tests (scripting) : Adoption et enjeux (comple...
Les outils d’automatisation de tests (scripting) : Adoption et enjeux (comple...
AQT-presentations
 
[PFE] Master en ingénierie du logiciel
[PFE] Master en ingénierie du logiciel[PFE] Master en ingénierie du logiciel
[PFE] Master en ingénierie du logiciel
USTHB & DELTALOG
 
TDD, BDD and mocks
TDD, BDD and mocksTDD, BDD and mocks
TDD, BDD and mocks
Kerry Buckley
 
Test de logiciels
Test de logiciels Test de logiciels
Test de logiciels
Bilel Abed
 
Stratégie de tests type
Stratégie de tests typeStratégie de tests type
Stratégie de tests typemadspock
 
Génie Logiciel : les tests
Génie Logiciel : les testsGénie Logiciel : les tests
Génie Logiciel : les tests
Mohammed Amine Mostefai
 
TDD - Agile
TDD - Agile TDD - Agile
TDD - Agile
harinderpisces
 
Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...
Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...
Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...
Zohirul Alam Tiemoon
 
Introduction to Acceptance Test Driven Development
Introduction to Acceptance Test Driven DevelopmentIntroduction to Acceptance Test Driven Development
Introduction to Acceptance Test Driven Development
Elisabeth Hendrickson
 
Intro sur les tests unitaires
Intro sur les tests unitairesIntro sur les tests unitaires
Intro sur les tests unitairesPHPPRO
 
reveal.js 3.0.0
reveal.js 3.0.0reveal.js 3.0.0
reveal.js 3.0.0
Hakim El Hattab
 
Outils de tests open-source
Outils de tests open-sourceOutils de tests open-source
Outils de tests open-sourceGilles Mantel
 

En vedette (14)

Elasticsearch
ElasticsearchElasticsearch
Elasticsearch
 
assertYourself - Breaking the Theories and Assumptions of Unit Testing in Flex
assertYourself - Breaking the Theories and Assumptions of Unit Testing in FlexassertYourself - Breaking the Theories and Assumptions of Unit Testing in Flex
assertYourself - Breaking the Theories and Assumptions of Unit Testing in Flex
 
Les outils d’automatisation de tests (scripting) : Adoption et enjeux (comple...
Les outils d’automatisation de tests (scripting) : Adoption et enjeux (comple...Les outils d’automatisation de tests (scripting) : Adoption et enjeux (comple...
Les outils d’automatisation de tests (scripting) : Adoption et enjeux (comple...
 
[PFE] Master en ingénierie du logiciel
[PFE] Master en ingénierie du logiciel[PFE] Master en ingénierie du logiciel
[PFE] Master en ingénierie du logiciel
 
TDD, BDD and mocks
TDD, BDD and mocksTDD, BDD and mocks
TDD, BDD and mocks
 
Test de logiciels
Test de logiciels Test de logiciels
Test de logiciels
 
Stratégie de tests type
Stratégie de tests typeStratégie de tests type
Stratégie de tests type
 
Génie Logiciel : les tests
Génie Logiciel : les testsGénie Logiciel : les tests
Génie Logiciel : les tests
 
TDD - Agile
TDD - Agile TDD - Agile
TDD - Agile
 
Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...
Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...
Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...
 
Introduction to Acceptance Test Driven Development
Introduction to Acceptance Test Driven DevelopmentIntroduction to Acceptance Test Driven Development
Introduction to Acceptance Test Driven Development
 
Intro sur les tests unitaires
Intro sur les tests unitairesIntro sur les tests unitaires
Intro sur les tests unitaires
 
reveal.js 3.0.0
reveal.js 3.0.0reveal.js 3.0.0
reveal.js 3.0.0
 
Outils de tests open-source
Outils de tests open-sourceOutils de tests open-source
Outils de tests open-source
 

Similaire à Les tests en PHP

Bbl sur les tests
Bbl sur les testsBbl sur les tests
Bbl sur les tests
Idriss Neumann
 
Des tests modernes pour Drupal
Des tests modernes pour DrupalDes tests modernes pour Drupal
Des tests modernes pour Drupal
Christophe Villeneuve
 
Optimiser son environnement de développement PHP (Tuto NetBeans v4.4)
Optimiser son environnement de développement PHP (Tuto NetBeans v4.4)Optimiser son environnement de développement PHP (Tuto NetBeans v4.4)
Optimiser son environnement de développement PHP (Tuto NetBeans v4.4)
Nicolas Defay
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application java
Antoine Rey
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
Ippon
 
testUnitaire (1).pptx
testUnitaire (1).pptxtestUnitaire (1).pptx
testUnitaire (1).pptx
ManalAg
 
Automatisation des tests - objectifs et concepts - partie 2
Automatisation des tests  - objectifs et concepts - partie 2Automatisation des tests  - objectifs et concepts - partie 2
Automatisation des tests - objectifs et concepts - partie 2
Christophe Rochefolle
 
Valider par des tests - Blend
Valider par des tests - BlendValider par des tests - Blend
Valider par des tests - Blend
Christophe Villeneuve
 
PyConFR - testons en python
PyConFR - testons en pythonPyConFR - testons en python
PyConFR - testons en pythongburet
 
Test unitaires
Test unitairesTest unitaires
Test unitaires
Mohamed Akrouh
 
Formation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratifFormation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratif
kemenaran
 
Princesse CI au pays des tests
Princesse CI au pays des testsPrincesse CI au pays des tests
Princesse CI au pays des tests
Hubert Lenoir
 
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
fdussert
 
Cocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitairesCocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitairesCocoaHeads France
 
BBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - PuppetBBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - Puppet
Olivier BAZOUD
 
Testinfra pyconfr 2017
Testinfra pyconfr 2017Testinfra pyconfr 2017
Testinfra pyconfr 2017
Logilab
 
Les tests comportementaux avec aspnet core
Les tests comportementaux avec aspnet coreLes tests comportementaux avec aspnet core
Les tests comportementaux avec aspnet core
Arnaud Auroux
 
Tester avant de déployer ; comment tester ses déploiements ARM.
Tester avant de déployer ; comment tester ses déploiements ARM.Tester avant de déployer ; comment tester ses déploiements ARM.
Tester avant de déployer ; comment tester ses déploiements ARM.
AZUG FR
 
Tests Dinterface SWT
Tests Dinterface SWTTests Dinterface SWT
Tests Dinterface SWT
Eric Le Merdy
 
Conformiq
ConformiqConformiq
Conformiq
Soukaina Boujadi
 

Similaire à Les tests en PHP (20)

Bbl sur les tests
Bbl sur les testsBbl sur les tests
Bbl sur les tests
 
Des tests modernes pour Drupal
Des tests modernes pour DrupalDes tests modernes pour Drupal
Des tests modernes pour Drupal
 
Optimiser son environnement de développement PHP (Tuto NetBeans v4.4)
Optimiser son environnement de développement PHP (Tuto NetBeans v4.4)Optimiser son environnement de développement PHP (Tuto NetBeans v4.4)
Optimiser son environnement de développement PHP (Tuto NetBeans v4.4)
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application java
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
 
testUnitaire (1).pptx
testUnitaire (1).pptxtestUnitaire (1).pptx
testUnitaire (1).pptx
 
Automatisation des tests - objectifs et concepts - partie 2
Automatisation des tests  - objectifs et concepts - partie 2Automatisation des tests  - objectifs et concepts - partie 2
Automatisation des tests - objectifs et concepts - partie 2
 
Valider par des tests - Blend
Valider par des tests - BlendValider par des tests - Blend
Valider par des tests - Blend
 
PyConFR - testons en python
PyConFR - testons en pythonPyConFR - testons en python
PyConFR - testons en python
 
Test unitaires
Test unitairesTest unitaires
Test unitaires
 
Formation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratifFormation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratif
 
Princesse CI au pays des tests
Princesse CI au pays des testsPrincesse CI au pays des tests
Princesse CI au pays des tests
 
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
 
Cocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitairesCocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitaires
 
BBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - PuppetBBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - Puppet
 
Testinfra pyconfr 2017
Testinfra pyconfr 2017Testinfra pyconfr 2017
Testinfra pyconfr 2017
 
Les tests comportementaux avec aspnet core
Les tests comportementaux avec aspnet coreLes tests comportementaux avec aspnet core
Les tests comportementaux avec aspnet core
 
Tester avant de déployer ; comment tester ses déploiements ARM.
Tester avant de déployer ; comment tester ses déploiements ARM.Tester avant de déployer ; comment tester ses déploiements ARM.
Tester avant de déployer ; comment tester ses déploiements ARM.
 
Tests Dinterface SWT
Tests Dinterface SWTTests Dinterface SWT
Tests Dinterface SWT
 
Conformiq
ConformiqConformiq
Conformiq
 

Dernier

COURS ANALYSE FINANCIERE-NOGLO Méthodes d’analyses financières.pdf
COURS ANALYSE FINANCIERE-NOGLO Méthodes d’analyses financières.pdfCOURS ANALYSE FINANCIERE-NOGLO Méthodes d’analyses financières.pdf
COURS ANALYSE FINANCIERE-NOGLO Méthodes d’analyses financières.pdf
sieousse95
 
Comment aborder le changement climatique dans son métier, volet adaptation
Comment aborder le changement climatique dans son métier, volet adaptationComment aborder le changement climatique dans son métier, volet adaptation
Comment aborder le changement climatique dans son métier, volet adaptation
Institut de l'Elevage - Idele
 
Quelles rotations dans les systèmes caprins de Nouvelle-Aquitaine et Pays de ...
Quelles rotations dans les systèmes caprins de Nouvelle-Aquitaine et Pays de ...Quelles rotations dans les systèmes caprins de Nouvelle-Aquitaine et Pays de ...
Quelles rotations dans les systèmes caprins de Nouvelle-Aquitaine et Pays de ...
Institut de l'Elevage - Idele
 
Alternative - Complément au Tramway et 3ème lien de la ville de Québec
Alternative - Complément  au Tramway et 3ème lien de la ville de Québec  Alternative - Complément  au Tramway et 3ème lien de la ville de Québec
Alternative - Complément au Tramway et 3ème lien de la ville de Québec
Daniel Bedard
 
Presentation d'esquisse route juin 2023.pptx
Presentation d'esquisse route juin 2023.pptxPresentation d'esquisse route juin 2023.pptx
Presentation d'esquisse route juin 2023.pptx
imed53
 
1er webinaire INOSYS Réseaux d’élevage Ovins Viande
1er webinaire INOSYS Réseaux d’élevage Ovins Viande1er webinaire INOSYS Réseaux d’élevage Ovins Viande
1er webinaire INOSYS Réseaux d’élevage Ovins Viande
Institut de l'Elevage - Idele
 
Présentation PFE (MOUAD LAZRAK) (2).pptx
Présentation PFE (MOUAD LAZRAK) (2).pptxPrésentation PFE (MOUAD LAZRAK) (2).pptx
Présentation PFE (MOUAD LAZRAK) (2).pptx
khalilbatariagro
 

Dernier (7)

COURS ANALYSE FINANCIERE-NOGLO Méthodes d’analyses financières.pdf
COURS ANALYSE FINANCIERE-NOGLO Méthodes d’analyses financières.pdfCOURS ANALYSE FINANCIERE-NOGLO Méthodes d’analyses financières.pdf
COURS ANALYSE FINANCIERE-NOGLO Méthodes d’analyses financières.pdf
 
Comment aborder le changement climatique dans son métier, volet adaptation
Comment aborder le changement climatique dans son métier, volet adaptationComment aborder le changement climatique dans son métier, volet adaptation
Comment aborder le changement climatique dans son métier, volet adaptation
 
Quelles rotations dans les systèmes caprins de Nouvelle-Aquitaine et Pays de ...
Quelles rotations dans les systèmes caprins de Nouvelle-Aquitaine et Pays de ...Quelles rotations dans les systèmes caprins de Nouvelle-Aquitaine et Pays de ...
Quelles rotations dans les systèmes caprins de Nouvelle-Aquitaine et Pays de ...
 
Alternative - Complément au Tramway et 3ème lien de la ville de Québec
Alternative - Complément  au Tramway et 3ème lien de la ville de Québec  Alternative - Complément  au Tramway et 3ème lien de la ville de Québec
Alternative - Complément au Tramway et 3ème lien de la ville de Québec
 
Presentation d'esquisse route juin 2023.pptx
Presentation d'esquisse route juin 2023.pptxPresentation d'esquisse route juin 2023.pptx
Presentation d'esquisse route juin 2023.pptx
 
1er webinaire INOSYS Réseaux d’élevage Ovins Viande
1er webinaire INOSYS Réseaux d’élevage Ovins Viande1er webinaire INOSYS Réseaux d’élevage Ovins Viande
1er webinaire INOSYS Réseaux d’élevage Ovins Viande
 
Présentation PFE (MOUAD LAZRAK) (2).pptx
Présentation PFE (MOUAD LAZRAK) (2).pptxPrésentation PFE (MOUAD LAZRAK) (2).pptx
Présentation PFE (MOUAD LAZRAK) (2).pptx
 

Les tests en PHP

  • 1. Les tests en PHP avec PHPUnit
  • 2. Tests automatisés Tests unitaires (structurels) S’assurer de l’intégrité et du bon fonctionnement du code source. Outils : PHPUnit / Atoum Tests fonctionnels Vérifier le comportement métier d’une application. Outils : Selenium Tests de spécifications (comportement) Contrôler qu’une application correspond au besoin formulé par le client. Outils : Behat / PHPSpec
  • 3. Tests unitaires Les tests unitaires permettent de valider que le code développé est conforme aux intentions du développeur. Une unité représente une classe et ses méthodes. Ces tests doivent être répétables, automatiques, indépendants et rapides. Michaël Feathers définit dans Working Effectively With Legacy Code un test unitaire de la façon suivante : Il ne communique pas avec la base de données Il ne communique pas avec d’autres ressources sur le réseau Il ne manipule pas un ou plusieurs fichiers Il peut s’exécuter en même temps que les autres tests unitaires On ne doit pas faire quelque chose de spécial, comme éditer un fichier de configuration, pour l’exécuter
  • 4. Tests fonctionnels Les tests fonctionnels permettent de tester l’intégration des différentes couches applicatives. Ils aident également à tester qu’une nouvelle fonctionnalité n’est pas la source d’une régression fonctionnelle. Workflow standard Envoi d’une requête HTTP Test de la réponse Clic sur un lien ou envoi d’un formulaire Test de la réponse Nettoyer et recommencer
  • 5. Tests de spécifications Les tests de spécifications sont des tests fonctionnels avec un formalisme. Cette méthodologie a pour objectif d’améliorer la compréhension et la collaboration du métier, du Product Owner, des développeurs, des testeurs et de toute autre partie prenante. Les tests d’acceptance sont écrits par les PO, à l’aide du langage Gherkin. Exemple de description du comportement de la demande : Scenario: Searching for a page that does exist Given I am on "/wiki/Main_Page" When I fill in "search" with "Behavior Driven Development" And I press "searchButton" Then I should see "agile software development"
  • 6. PHPUnit PHPUnit est un framework open source de tests unitaires. https://github.com/sebastianbergmann/phpunit Créé en 2004 par Sebastian Bergmann, il est maintenant devenu un standard : Intégré à de nombreux frameworks Installable en standalone avec composer Il est possible d’effectuer des tests fonctionnels avec Symfony (Web Test Case) et d’autres frameworks PHP, comme Laravel. PHPUnit utilise massivement des tags PHPDoc personnalisés (de manière toujours optionnelle).
  • 7. Écrire des tests Assertions principales - assertTrue() - assertEquals() - assertContains() - assertCount() - assertEmpty() - assertInstanceOf() - assertNull() Annotations principales - @expectedException : vérifier qu’une exception est lancée. - @dataProvider : fournir plusieurs jeux de données afin d’éviter la duplication de méthodes de test. <?php use PHPUnitFrameworkTestCase; class DataTest extends TestCase { /** @dataProvider additionProvider */ public function testAdd($a, $b, $expected) { $this->assertEquals($expected, $a + $b); } public function additionProvider() { return [ [0, 0, 0], [0, 1, 1], [1, 0, 1], ]; } }
  • 8. Le pattern Mock Object Le pattern Mock Object permet d’isoler une ressource. Mock : Faux objet. L’utilisation des mocks permet également de simuler un appel de fonction plutôt que l’exécuter. C’est par exemple utile pour simuler une classe qui fait appel à une librairie extérieure. Stub : Bouchon. C’est la valeur retournée lors de l’appel à une méthode d’un objet mocké. <?php use PHPUnitFrameworkTestCase; class StubTest extends TestCase { public function testStub() { // Create a stub for the SomeClass class. $stub = $this->getMockBuilder($originalClassName) ->disableOriginalConstructor() ->getMock(); // Configure the stub. $stub->method('doSomething') ->willReturn('foo'); // Calling $stub->doSomething() will now return 'foo'. $this->assertEquals('foo', $stub->doSomething()); } }
  • 9. Base de données et fixtures Fixtures : jeu de données contrôlées. Dans un scénario, PHPUnit lance les méthodes dans l'ordre suivant : 1. setUpBeforeClass() : exécuté une fois en début de scénario 2. setUp() : exécuté avant chaque test du scénario : "constructeur" d'environnement 3. assertPreConditions() : effectue des assertions sur l'état initial de l'environnement du test à venir 4. testOne() : un premier test 5. testTwo() : un deuxième test 6. assertPostConditions() : effectue des assertions sur l'état de l'environnement après le lancement d'un test 7. tearDown() : exécuté après chaque test du scénario : "destructeur" d'environnement 8. tearDownAfterClass() : exécuté une fois en fin de de scénario <?php use PHPUnitFrameworkTestCase; class StackTest extends TestCase { protected $stack; protected function setUp() { $this->stack = []; } public function testEmpty() { $this->assertTrue(empty($this->stack)); } public function testPush() { array_push($this->stack, 'foo'); $this->assertEquals('foo', $this->stack[count($this->stack)-1]); $this->assertFalse(empty($this->stack)); } public function testPop() { array_push($this->stack, 'foo'); $this->assertEquals('foo', array_pop($this->stack)); $this->assertTrue(empty($this->stack)); } }
  • 10. Code coverage La couverture de code montre le nombre de lignes de code sécurisées par des tests. PHPunit permet de générer un rapport sur la couverture de code (nécessite l’activation de xdebug), permettant de montrer les statistiques sur toutes les classes, méthodes et lignes couvertes par des tests. $ bin/phpunit --coverage-html reports
  • 11. Test Driven Development Technique de développement logiciel au coeur des méthodes agiles telles que l'extreme programming. Red - Green - Refactor Cycle 1. Red state : Déclarer et nommer un test, écrire l’assertion, le faire échouer 2. Green state : Faire passer le test au vert le plus tôt possible (quitte à faker) 3. Refactor state : Remanier le code (l’améliorer, le rendre plus lisible)