« SPARQL Protocol and RDF Query Language/Travail pratique/Initiation à PHPUnit » : différence entre les versions

Contenu supprimé Contenu ajouté
m Robot : Changement de type cosmétique
Aucun résumé des modifications
Ligne 14 :
== Introduction ==
=== Pourquoi utiliser PHP ? ===
DansDDans ce TP, nous allons installer PHPUnit qui est particulièrement utile pour faire des tests de non régressions. ainsi que Phing pour automatiser ces tests.
 
=== Durée du TP ===
Ligne 26 :
PHPUnit fournit un cadre simple pour créer une suite de tests pour automatiser les tests unitaires de fonctions et de classes.
 
PHPUnit est inspiré par JUnit qui a été créé par Kent Beck et Erich Gamma pour être un outil pour l'[[w:Extreme programming|eXtreme programming]] (ou XP). Une des règles de XP est de tester les composants logiciels aussi souvent que possible et le plus tôt possible. De cette façon vous n'aurez pasplus à corriger les bugs et erreurs de ses classes tout en mettant en place une application plus importantes qui dépendent de ces classes.
 
Généralement, le développement des [[w:Test unitaire|tests unitaires]] avec PHPUnit est à faire quel que soit le nombre de personnes sur un projet et on applique les autres règles XP qu'à partir de 4 ou 5 personnes développant sur le même projet.
Ligne 40 :
* [http://www.phpunit.de/manual/current/en/index.html Documentation officielle de PHPUnit]
* [http://pear.php.net/manual/en/package.php.phpunit.php Tutoriel en anglais]
* [http://www.phing.info/docs/guide/stable/ DocDocumentation de Phing]
 
== Installation ==
=== PHPUnit ===
PhpUnit n'est pas toujours évidant à installer. Il ne faut pas hésiter à regarder sur Internetle Web les solutions que les utilisateurs ont trouvétrouvées pour mettre à jour leurs versions.
 
Nous installons les paquets :
Ligne 50 :
* php5-curl librairie de communication réseau pour PHP qui est utilisé par phpunit 3.5
 
Taper ces commandes et suivre'''Suivre les instructions suivantes : pour installer PHPUnit'''
 
1. Taper ces commandes :
 
'''Sous Ubuntu'''
Ligne 64 ⟶ 66 :
(A vérifier)'''Sous Fedora'''
<source lang="bash">
su -
yum install build-essential phpunit php5-curl
pear channel-discover pear.phpunit.de
Ligne 72 ⟶ 75 :
</source>
 
2. Vérifier la version installée par PHPUnit avec la commande suivante :
<source lang="bash">
phpunit --version
Ligne 80 ⟶ 83 :
 
=== Phing ===
Phing est un outil qui va permettre de déployer notre projet mais aussi d'exécuter nos tests unitaires avec PhpUnit.
 
Installer Phing avec ces commandes :
Ligne 107 ⟶ 110 :
Les débutants en PHP pensent souvent à tort qu'il suffit de faire quelques echo, print_r() ou var_dump() pour tester leurs programmes. Dés lors que quelqu'un développe de cette manière, il est très difficile de modifier cette habitude.
 
Les tests doivent accompagnés toutes la vie d'un logiciel. Si un développeur modifie un logiciel sans maintenir les tests associés, il brise la chaîne vertueuse que ses pères ont essayé de maintenir et fait du logiciel une version Beta pour toujours (c'est -à -dire une version buggéeboguée). Dès lors qu'un logiciel n'a plus de tests, sa durée de vie sera courte.
 
De plus, la méthode agile (ou Extreme Programming) intégreintègre les tests unitaires. Cela permet de modifier violemment le code pour l'améliorer (refactoring) car le développeur sait qu'il y a un filet de sécurité qui ne laissera passer aucune erreur déjà connue.
 
 
'''Voici la méthode pour développer des tests unitaires quel que soit le langage :'''
# Concevoirconcevoir votre classe/fonction sans l'implémenter
# créer une suite de tests
# ajouter votre suite de tests dans le script de déploiement de votre logiciel (insérer dans votre "usine de développement" si c'est un projet à plus de 4 ou 5 personnes à plein temps)
Ligne 131 ⟶ 134 :
 
Dans ce TP, nous n'utiliserons pas d'usine de développement comme [[w:Jenkins (informatique)|Jenkins]] ou [[w:en:Comparison of Continuous Integration Software|autres]] car nous considérons que nous sommes seuls sur ce projet et que nous pouvons déployer le code sans aucune validation extérieur.
Nous développerons dans ce TP un simple script [[w:Make|make]]build.xml qui suffira largement à importer, tester et déployer nos exemples pour nos TPs.
 
=== Concevoir l'arborescence de votre projet ===
Ligne 144 ⟶ 147 :
Dans ce répertoire de développement, nous retrouverons généralement :
* un fichier <code>README</code> qui indique comment déployer et tester le projet ;
* un fichier <code>MakeFilebuild.xml</code> qui contient les scripts pour déployer et testerla lemanière projetde le tester;
* un répertoire <code>src</code> qui contient les sources que vous avez développées ;
* un répertoire <code>tests</code> qui contient les tests des sources que vous avez développées ;
Ligne 167 ⟶ 170 :
}}
 
On créera le fichier MakeFilebuild.xml et README un peu plus loin dans le TP.
 
=== Concevoir votre classe ===
Nous supposons que nous avons besoin de faire une classe String.
 
'''Exercice''' : </br>
1. Créer le fichier String.class.php dans le répertoire ~/projets/moncv/src et insérer</br>
2. Insérer la classe ci-dessous dans ce fichier </br>
 
<source lang="php">
<?php
Ligne 209 ⟶ 213 :
Une fonction de test appelle des fonctions avec des paramètres pour obtenir une certaine valeur. Si la valeur obtenue est différente de la valeur attendue, la fonction de test génère une erreur qui fera échouer la suite de tests.
 
'''Exercice : Créer dansune lesuite répertoiredes tests du projetde la classe String.test.php et insérer le texte ci-dessous.'''<br/>
1. Créer dans le répertoire tests du projet la classe String.test.php.<br/>
2. Insérer le texte ci-dessous.<br/>
<source lang="php">
<?php
Ligne 266 ⟶ 272 :
 
=== Créer la suite des tests ===
Nous devons dans un premier temps agréger les tests dans une suite dans une classe PHP que l'on nomme ClassTest dans le répertoire "tests" du projet. Cela constituera notre suite de tests.
 
Nous devons dans un premier temps agréger les tests dans une suite dans une classe PHP que l'on nomme ClassTest dans le répertoire "tests" du projet.
 
'''Exercice''' : Créer le fichier ClassTest.php dans le répertoire tests qui contiendra le texte ci-dessous.
Ligne 333 ⟶ 338 :
=== Créer le script de déploiement ===
 
On crée mantenantmaintenant le script qui nous permettra de déployer le projet et de tester nos classes. Ce fichier sera progressivement complété dans les autres TPs.
 
Pour le moment, il contiendra seulement les lignes suivantes.
Ligne 375 ⟶ 380 :
</source>
 
On peut lancer les tests deet déployerle déploiement directement avec cette commande :
<source lang="bash">
phing
Ligne 381 ⟶ 386 :
 
=== Créer le fichier README ===
On crée pour finir le fichier README pour décrire notre programme et la manière de le tester.
 
{{remarque|titre=Remarque|contenu=
On crée pour finir le fichier README pour décrire notre programme et aussi pouvoir le tester. (Normalement le fichier README contient aussi le type de licence du programme, le nom du développeur, etc.)}}
 
'''Exercice''' : Créer le fichier README à la racine du projet moncv qui contiendra le texte ci-dessous.