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

Algorithme génétique
Algorithme génétiqueAlgorithme génétique
Algorithme génétiqueIlhem Daoudi
 
Hadoop Meetup Jan 2019 - Router-Based Federation and Storage Tiering
Hadoop Meetup Jan 2019 - Router-Based Federation and Storage TieringHadoop Meetup Jan 2019 - Router-Based Federation and Storage Tiering
Hadoop Meetup Jan 2019 - Router-Based Federation and Storage TieringErik Krogen
 
Understanding and Extending Prometheus AlertManager
Understanding and Extending Prometheus AlertManagerUnderstanding and Extending Prometheus AlertManager
Understanding and Extending Prometheus AlertManagerLee Calcote
 
JCR - Java Content Repositories
JCR - Java Content RepositoriesJCR - Java Content Repositories
JCR - Java Content RepositoriesCarsten Ziegeler
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice ArchitectureNguyen Tung
 
Introduction to Apache Flink - Fast and reliable big data processing
Introduction to Apache Flink - Fast and reliable big data processingIntroduction to Apache Flink - Fast and reliable big data processing
Introduction to Apache Flink - Fast and reliable big data processingTill Rohrmann
 
From airflow to google cloud composer
From airflow to google cloud composerFrom airflow to google cloud composer
From airflow to google cloud composerBruce Kuo
 
Server monitoring using grafana and prometheus
Server monitoring using grafana and prometheusServer monitoring using grafana and prometheus
Server monitoring using grafana and prometheusCeline George
 
An Introduction to Prometheus (GrafanaCon 2016)
An Introduction to Prometheus (GrafanaCon 2016)An Introduction to Prometheus (GrafanaCon 2016)
An Introduction to Prometheus (GrafanaCon 2016)Brian Brazil
 
Apache Airflow Architecture
Apache Airflow ArchitectureApache Airflow Architecture
Apache Airflow ArchitectureGerard Toonstra
 
Kinh nghiệm triển khai CI/CD tại cong ty SaaS phục vụ 70M người dùng
Kinh nghiệm triển khai CI/CD tại cong ty SaaS phục vụ 70M người dùngKinh nghiệm triển khai CI/CD tại cong ty SaaS phục vụ 70M người dùng
Kinh nghiệm triển khai CI/CD tại cong ty SaaS phục vụ 70M người dùngStringee JSC
 
Infrastructure & System Monitoring using Prometheus
Infrastructure & System Monitoring using PrometheusInfrastructure & System Monitoring using Prometheus
Infrastructure & System Monitoring using PrometheusMarco Pas
 
Monitoring With Prometheus
Monitoring With PrometheusMonitoring With Prometheus
Monitoring With PrometheusKnoldus Inc.
 
Observables in Angular
Observables in AngularObservables in Angular
Observables in AngularKnoldus Inc.
 
Chapitre 3 la recherche tabou
Chapitre 3 la recherche tabouChapitre 3 la recherche tabou
Chapitre 3 la recherche tabouAchraf Manaa
 
UML Part2- diagramme des uses cases_mansouri
UML Part2- diagramme des uses cases_mansouriUML Part2- diagramme des uses cases_mansouri
UML Part2- diagramme des uses cases_mansouriMansouri Khalifa
 
Apache Flink and what it is used for
Apache Flink and what it is used forApache Flink and what it is used for
Apache Flink and what it is used forAljoscha Krettek
 

Tendances (20)

Algorithme génétique
Algorithme génétiqueAlgorithme génétique
Algorithme génétique
 
Hadoop Meetup Jan 2019 - Router-Based Federation and Storage Tiering
Hadoop Meetup Jan 2019 - Router-Based Federation and Storage TieringHadoop Meetup Jan 2019 - Router-Based Federation and Storage Tiering
Hadoop Meetup Jan 2019 - Router-Based Federation and Storage Tiering
 
Understanding and Extending Prometheus AlertManager
Understanding and Extending Prometheus AlertManagerUnderstanding and Extending Prometheus AlertManager
Understanding and Extending Prometheus AlertManager
 
JCR - Java Content Repositories
JCR - Java Content RepositoriesJCR - Java Content Repositories
JCR - Java Content Repositories
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecture
 
Introduction to Apache Flink - Fast and reliable big data processing
Introduction to Apache Flink - Fast and reliable big data processingIntroduction to Apache Flink - Fast and reliable big data processing
Introduction to Apache Flink - Fast and reliable big data processing
 
Agents intelligents
Agents intelligentsAgents intelligents
Agents intelligents
 
From airflow to google cloud composer
From airflow to google cloud composerFrom airflow to google cloud composer
From airflow to google cloud composer
 
Apache Airflow
Apache AirflowApache Airflow
Apache Airflow
 
Server monitoring using grafana and prometheus
Server monitoring using grafana and prometheusServer monitoring using grafana and prometheus
Server monitoring using grafana and prometheus
 
An Introduction to Prometheus (GrafanaCon 2016)
An Introduction to Prometheus (GrafanaCon 2016)An Introduction to Prometheus (GrafanaCon 2016)
An Introduction to Prometheus (GrafanaCon 2016)
 
Apache Airflow Architecture
Apache Airflow ArchitectureApache Airflow Architecture
Apache Airflow Architecture
 
Kinh nghiệm triển khai CI/CD tại cong ty SaaS phục vụ 70M người dùng
Kinh nghiệm triển khai CI/CD tại cong ty SaaS phục vụ 70M người dùngKinh nghiệm triển khai CI/CD tại cong ty SaaS phục vụ 70M người dùng
Kinh nghiệm triển khai CI/CD tại cong ty SaaS phục vụ 70M người dùng
 
Infrastructure & System Monitoring using Prometheus
Infrastructure & System Monitoring using PrometheusInfrastructure & System Monitoring using Prometheus
Infrastructure & System Monitoring using Prometheus
 
Apache Nifi Crash Course
Apache Nifi Crash CourseApache Nifi Crash Course
Apache Nifi Crash Course
 
Monitoring With Prometheus
Monitoring With PrometheusMonitoring With Prometheus
Monitoring With Prometheus
 
Observables in Angular
Observables in AngularObservables in Angular
Observables in Angular
 
Chapitre 3 la recherche tabou
Chapitre 3 la recherche tabouChapitre 3 la recherche tabou
Chapitre 3 la recherche tabou
 
UML Part2- diagramme des uses cases_mansouri
UML Part2- diagramme des uses cases_mansouriUML Part2- diagramme des uses cases_mansouri
UML Part2- diagramme des uses cases_mansouri
 
Apache Flink and what it is used for
Apache Flink and what it is used forApache Flink and what it is used for
Apache Flink and what it is used for
 

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)