SlideShare une entreprise Scribd logo
1  sur  11
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

Copie de exposã© pfe
Copie de exposã© pfeCopie de exposã© pfe
Copie de exposã© pfeRiadh K.
 
Alphorm.com Formation Vue JS 3 : Exploiter la Composition API
Alphorm.com Formation Vue JS 3 : Exploiter la Composition APIAlphorm.com Formation Vue JS 3 : Exploiter la Composition API
Alphorm.com Formation Vue JS 3 : Exploiter la Composition APIAlphorm
 
Webinar "fonctions documentaires Alfresco"
Webinar "fonctions documentaires Alfresco"Webinar "fonctions documentaires Alfresco"
Webinar "fonctions documentaires Alfresco"Michael Harlaut
 
2015 07 14_presentation-pfe-gestion-parc-informatique
2015 07 14_presentation-pfe-gestion-parc-informatique2015 07 14_presentation-pfe-gestion-parc-informatique
2015 07 14_presentation-pfe-gestion-parc-informatiqueUsmiste Rosso
 
Projet de fin d étude (1)
Projet de fin d étude (1)Projet de fin d étude (1)
Projet de fin d étude (1)Sanaa Guissar
 
différence entre navigateur et moteur de recherche
différence entre navigateur et moteur de recherchedifférence entre navigateur et moteur de recherche
différence entre navigateur et moteur de rechercheEsméralda Hanchir
 
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...ENSET, Université Hassan II Casablanca
 
Soutenance Stage Lafarge
Soutenance Stage LafargeSoutenance Stage Lafarge
Soutenance Stage LafargeMajdalina01
 
Les normes-de-l-audit-financier
Les normes-de-l-audit-financierLes normes-de-l-audit-financier
Les normes-de-l-audit-financierRabah HELAL
 
Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...
Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...
Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...Mohammed JAITI
 
Le Management de projets selon le référentiel du PMI (Project Management Inst...
Le Management de projets selon le référentiel du PMI (Project Management Inst...Le Management de projets selon le référentiel du PMI (Project Management Inst...
Le Management de projets selon le référentiel du PMI (Project Management Inst...FormaXion
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiENSET, Université Hassan II Casablanca
 
Modélisation de données pour MongoDB
Modélisation de données pour MongoDBModélisation de données pour MongoDB
Modélisation de données pour MongoDBMongoDB
 
Parallel batch processing with spring batch slideshare
Parallel batch processing with spring batch   slideshareParallel batch processing with spring batch   slideshare
Parallel batch processing with spring batch slideshareMorten Andersen-Gott
 
Outils et techniques des gestion des risques
Outils et techniques des gestion des risquesOutils et techniques des gestion des risques
Outils et techniques des gestion des risquesGBO
 
formation istqb.pdf
formation istqb.pdfformation istqb.pdf
formation istqb.pdfmido04
 
Soutenance de stage
Soutenance de stageSoutenance de stage
Soutenance de stageGaut' Xp
 
La pratique de l'audit interne dans les entreprises d'assurances copie (2)
La pratique de l'audit interne dans les entreprises d'assurances   copie (2)La pratique de l'audit interne dans les entreprises d'assurances   copie (2)
La pratique de l'audit interne dans les entreprises d'assurances copie (2)dodoooooo
 
Extreme programming
Extreme programmingExtreme programming
Extreme programmingBilal ZIANE
 

Tendances (20)

Copie de exposã© pfe
Copie de exposã© pfeCopie de exposã© pfe
Copie de exposã© pfe
 
Alphorm.com Formation Vue JS 3 : Exploiter la Composition API
Alphorm.com Formation Vue JS 3 : Exploiter la Composition APIAlphorm.com Formation Vue JS 3 : Exploiter la Composition API
Alphorm.com Formation Vue JS 3 : Exploiter la Composition API
 
Webinar "fonctions documentaires Alfresco"
Webinar "fonctions documentaires Alfresco"Webinar "fonctions documentaires Alfresco"
Webinar "fonctions documentaires Alfresco"
 
2015 07 14_presentation-pfe-gestion-parc-informatique
2015 07 14_presentation-pfe-gestion-parc-informatique2015 07 14_presentation-pfe-gestion-parc-informatique
2015 07 14_presentation-pfe-gestion-parc-informatique
 
Projet de fin d étude (1)
Projet de fin d étude (1)Projet de fin d étude (1)
Projet de fin d étude (1)
 
différence entre navigateur et moteur de recherche
différence entre navigateur et moteur de recherchedifférence entre navigateur et moteur de recherche
différence entre navigateur et moteur de recherche
 
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
 
Soutenance Stage Lafarge
Soutenance Stage LafargeSoutenance Stage Lafarge
Soutenance Stage Lafarge
 
Les normes-de-l-audit-financier
Les normes-de-l-audit-financierLes normes-de-l-audit-financier
Les normes-de-l-audit-financier
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...
Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...
Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...
 
Le Management de projets selon le référentiel du PMI (Project Management Inst...
Le Management de projets selon le référentiel du PMI (Project Management Inst...Le Management de projets selon le référentiel du PMI (Project Management Inst...
Le Management de projets selon le référentiel du PMI (Project Management Inst...
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
 
Modélisation de données pour MongoDB
Modélisation de données pour MongoDBModélisation de données pour MongoDB
Modélisation de données pour MongoDB
 
Parallel batch processing with spring batch slideshare
Parallel batch processing with spring batch   slideshareParallel batch processing with spring batch   slideshare
Parallel batch processing with spring batch slideshare
 
Outils et techniques des gestion des risques
Outils et techniques des gestion des risquesOutils et techniques des gestion des risques
Outils et techniques des gestion des risques
 
formation istqb.pdf
formation istqb.pdfformation istqb.pdf
formation istqb.pdf
 
Soutenance de stage
Soutenance de stageSoutenance de stage
Soutenance de stage
 
La pratique de l'audit interne dans les entreprises d'assurances copie (2)
La pratique de l'audit interne dans les entreprises d'assurances   copie (2)La pratique de l'audit interne dans les entreprises d'assurances   copie (2)
La pratique de l'audit interne dans les entreprises d'assurances copie (2)
 
Extreme programming
Extreme programmingExtreme programming
Extreme programming
 

En vedette

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 Flexmichael.labriola
 
Automatisation des tests
Automatisation des testsAutomatisation des tests
Automatisation des testsZhu Wei QI
 
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 logicielUSTHB & DELTALOG
 
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
 
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 DevelopmentElisabeth Hendrickson
 
Intro sur les tests unitaires
Intro sur les tests unitairesIntro sur les tests unitaires
Intro sur les tests unitairesPHPPRO
 
Outils de tests open-source
Outils de tests open-sourceOutils de tests open-source
Outils de tests open-sourceGilles Mantel
 

En vedette (15)

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
 
Automatisation des tests
Automatisation des testsAutomatisation des tests
Automatisation des tests
 
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

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 javaAntoine 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).pptxManalAg
 
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 2Christophe Rochefolle
 
PyConFR - testons en python
PyConFR - testons en pythonPyConFR - testons en python
PyConFR - testons en pythongburet
 
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 collaboratifkemenaran
 
Princesse CI au pays des tests
Princesse CI au pays des testsPrincesse CI au pays des tests
Princesse CI au pays des testsHubert 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 - PuppetOlivier BAZOUD
 
Testinfra pyconfr 2017
Testinfra pyconfr 2017Testinfra pyconfr 2017
Testinfra pyconfr 2017Logilab
 
Les tests comportementaux avec aspnet core
Les tests comportementaux avec aspnet coreLes tests comportementaux avec aspnet core
Les tests comportementaux avec aspnet coreArnaud 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 SWTEric Le Merdy
 

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
 

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)