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

Contenu supprimé Contenu ajouté
Aucun résumé des modifications
Relecture
Ligne 1 :
{{ébauche informatique}}
 
{{Travail pratique présentation
| objectif1 = installer PHPUnit
| objectif2 = installer Phing
| objectif3 = créer un projet eXtreme programming avec PHP
| durée = 2 heures
| matériel1 = un serveur Linux avec PHP.
}}
<div style="float:right; padding: 0 0 0 1em;">__TOC__</div>
{{Travail pratique
| titre = Initiation à PHPUnit
Ligne 12 ⟶ 19 :
}}
 
=== Pourquoi utilisers'initier PHPà PHPUnit ? ===
== Introduction ==
DDansDans ce TP, nous allons installer PHPUnit, qui est particulièrement utile pour faire des tests de non régressions-régression, ainsi que Phing, pour automatiser ces tests.
=== Pourquoi utiliser PHP ? ===
DDans 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.
 
=== A savoir pouravant de commencer ===
=== Durée du TP ===
PHPUnit fournit un cadre simple pour créer une suite de tests pour automatiser les tests unitaires de fonctions et de classes.
 
PHPUnit esta été inspiré par JUnit, qui a été créé par Kent Beck et Erich Gamma pouren être untant qu'outil pour l'[[w:Extreme programming|eXtreme programming]] (ou XP). Une des règles de XP estconsiste deà tester les composants logiciels aussi souvent que possible et le plus tôt possible. De cette façon, vous n'aurez plus à corriger les bugs et erreurs de sesces classes, tout en mettant en place une application plus importantesimportante qui dépendentdépend dedes cesmêmes classes.
'''2 heures'''
 
=== Matériel du TP ===
Il vous faut avoir fait au moins le TP PHP.
 
=== A savoir pour commencer ===
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 plus à 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 n'applique les autres règles XP qu'à partir de 4 ou 5 personnes développant sur le même projet.
 
Des tests unitaires font gagner beaucoup de temps dès le début d'un projet.
 
Les librairies PHP pour SPARQL ont des tests unitaires qu'il faut savoir exécuter pour pouvoir développer des applications avec SPARQL.
 
Les librairies PHP pour SPARQL ontcomportent des tests unitaires qu'il faut savoir exécuter pour pouvoir développer des applications avec SPARQL.
=== Documentations ===
 
Ligne 44 :
== Installation ==
=== PHPUnit ===
PhpUnitPHPUnit n'est pas toujours évidantévident à installer. Il ne faut pas hésiter à regarderchercher sur le Web les solutions que les utilisateurs ont trouvées pour mettre à jour leurs versions.
 
Nous installons les paquets :
* phpunit pour installer phpunit 3.4 que nous allons mettre à jour
* php5-curl librairie de communication réseau pour PHP, qui est utiliséutilisée par phpunit 3.5
 
'''Suivre les instructions suivantes : pour installer PHPUnit :'''
 
1. Taper ces commandes :
Ligne 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 91 :
</source>
 
Il y a un problème d'encodage de la sortie pour la console de d'Eclipse dans le TP suivant. Nous réglons immédiatement le problème.
 
Ouvrir le fichier suivant :
Ligne 108 :
 
== Développer avec PHPUnit ==
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ésDès lors que quelqu'un développe de cette manière, il est très difficile de modifier cette habitude.
 
Les tests doivent accompagnésaccompagner toutestoute 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 boguée). Dès lors qu'un logiciel n'ane subit plus de tests, sa durée de vie sera courte.
 
De plus, la méthode agile (ou Extreme Programming) intè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 :'''
 
'''Voici la méthode pour développer des tests unitaires quel que soit le langage :'''
# concevoir votre classe/fonction sans l'implémenter
# créer une suite de tests
Ligne 127 ⟶ 126 :
# vous tentez de reproduire l'erreur, en développant un nouveau test unitaire
# seulement après être arrivé à reproduire l'erreur, vous modifiez le programme pour la corriger
# Etvous re-testertestez !;
# si tout est OKconforme, déployer la nouvelle version.
 
Voici la théorie, mais on ne peut pas toujours reproduire une erreur immédiatement, ; il faut alors improviser pour analyser le problème et trouver un palliatif à cetcette erreur.
 
 
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érieurextérieure.
 
Nous développerons dans ce TP un simple script build.xml qui suffira largement à importer, tester et déployer nos exemples pour nos TPsTP.
 
=== Concevoir l'arborescence de votre projet ===
 
Un projet Web ne doit pas être développé alors qu'il est en même temps en production (c'est-à-dire en cours d'utilisation).
 
Dans le [[SPARQL Protocol and RDF Query Language/Travail pratique/Faire un serveur Web|TP faire un serveur Web]], nous avons créé un site Web, '''moncv''', qui servira aux tests sur notre PC de développement avant un possible déploiement à distance sur un autre serveur.
 
Nous aurons donc :
Ligne 153 ⟶ 154 :
* un répertoire <code>bdd</code> qui contient les scripts SQL pour mettre à jour la base de données.
 
'''Exercice''' : Créer sur le répertoire <code>~/projets/moncv</code> et: les sous-répertoires comme indiqué plus haut.
 
'''Exercice''' : Créer sur le répertoire <code>~/projets/moncv</code> et les sous-répertoires comme indiqué plus haut.
{{solution|contenu=
VoilàVoici les commandes à faireentrer sous linuxLinux pour créer l'arborescence de votre projet « moncv » :
<source lang="bash">
cd ~
Ligne 176 :
 
'''Exercice''' : </br>
1.# Créer le fichier String.class.php dans le répertoire ~/projets/moncv/src </br>
2.# Insérer la classe ci-dessous dans ce fichier </br>
<source lang="php">
<?php
Ligne 205 :
 
=== Créer des tests ===
Maintenant, nous pouvons créer une suite de tests qui vérifie chaque fonction de votre classe String.
 
Une suite de tests PHP est une classe qui :
* hérite de la classe PHPUnit_TestCase, ;
* a des fonctions de tests identifiées par leur nom, commençant par le mot test.<br/> Exemple : la fonction testToString() est une fonction de test, car commençant par "test".
 
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 une suite desde tests de la classe String'''<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/>
Ligne 271 :
</source>
 
=== Créer la suite desde tests ===
Nous devons, dans un premier temps, agréger les tests dans une classe PHP que l'on nomme ClassTest, dans le répertoire "tests" du projet. Cela constituera notre suite de tests.
 
'''Exercice''' : Créer le fichier ClassTest.php dans le répertoire tests, qui contiendra le texte ci-dessous.
<source lang="php">
<?php
Ligne 301 :
</source>
 
Une fois que nos suites de tests sont créées (ici, en réalité, nous n'avons qu'une suite), nous avons une classe pour agréger ces suites et donc tous les tests du projet.
 
'''Exercice''' : Créer le fichier AllTests.php dans le répertoire tests qui contiendra le texte ci-dessous.
Ligne 334 :
</source>
 
Les tests indiquent qu'ils ont échoué. C'est logique, car justement la classe String n'a pas encore été implémentée.
 
=== Créer le script de déploiement ===
 
On crée maintenant le script qui nous permettra de déployer le projet et de tester nos classes. Ce fichier sera progressivement complété dans les autres TPsTP.
 
Pour le moment, il contiendra seulement les lignes suivantes.
 
Pour le moment, il contiendra seulement les lignes suivantes. :
<source lang="xml">
<?xml version="1.0" encoding="UTF-8"?>
Ligne 373 ⟶ 372 :
 
 
'''Exercice''' : Créer le fichier build.xml à la racine du projet moncv qui; il contiendra le texte ci-dessus.
 
On exécutera maintenant les tests avec la ligne de commande suivante :
Ligne 442 ⟶ 441 :
}}
 
Vous savez maintenant faire des tests unitaires en PHP. Cela vous sera indispensable pour tester et modifier les librairies PHP pourafin d'utiliser SPARQL.
 
Vous savez maintenant faire des tests unitaires en PHP. Cela vous sera indispensable pour tester et modifier les librairies PHP pour utiliser SPARQL.
 
[[Catégorie:SPARQL Protocol and RDF Query Language]]
 
{{Bas de page
| leçon = TP SPARQL
{{ébauche | idfaculté = informatique}}
| précédent = [[../Initiation à MySQL/]]
| suivant = [[../Initiation à Eclipse/]]
}}