06-03-2009, 05:25 PM
(06-03-2009, 04:39 PM)keke a écrit : Ha ben tiens. J'entends beaucoup parler de test unitaire (surtout après l'exposé sur le Xtrem Programming).
Comment t'y prends-tu pour faire tes tests unitaires ? (tu peux prendre un exemple précis qu'on pourra généraliser ensuite ?)
humpf, je ne retrouve plus le code de mes tests (pour une boutique il y a quelques années de ça...) et je n'ai pas encore fait de tests pour creajeu (je code et je débuggue à la place, c'est pas bien, mais bon...)
alors les tests unitaires en rapide :
- on utilise une librairie pour vérifier le résultat de fonctions : valeurs, valeurs en DB, fichier créé, supprimé...
- on ne peut pas tester du code full paté, il faut des fonctions ou des classes à tester
- chaque fonction/méthode doit faire un petit bout du travail : on ne peut tester que des choses "simples" car petites
- pour tester des valeurs en base de données, il faut une base de test, dédiée à ça. ce n'est pas la base de dev que l'on utilise en codant. c'est une base qui est recréée par script à chaque lancement de test (au moins pour les valeurs en DB; on peut garder la structure des tables)
on va prendre en exemple la vérification de mail :
- il faut vérifier le modèle : dutexte@undomaine.uneextension
La fonction à coder vérifiera ce modèle et renverra TRUE ou FALSE; elle n'enregistrera rien en base de données, elle ne fera que vérifier, comme ça elle reste simple et est "unitaire" fonctionnellement.
on va se créer des données de test, dans un tableau :
$key=>$value pour entrée=>sortie :
"un mail à tester" => "TRUE ou FALSE en retour"
Code PHP :
<?php
$mailList = array(
'ceci nest pas un mail' => FALSE,
'toto@test.com' => TRUE,
'toto@.com'=>FALSE,
''=>FALSE,
'@'=>FALSE
);
Créer cette liste donne des idées :
- il faut tester des adresses valides, bien sûr
- il faut tester des trucs qui n'ont rien à voir
- ne pas oublier ce qui ressemble vaguement au mail
- et le mail vide ( * = c'est une valeur effet de bord, à ne pas oublier)
Le test unitaire va ressembler à ça :
Code PHP :
<?php
// donnees de test
$mailList = array(
'ceci nest pas un mail' => FALSE,
'toto@test.com' => TRUE,
'toto@.com'=>FALSE,
''=>FALSE,
'@'=>FALSE
);
// test de la fonction
foreach($mailList AS $mail => $output)
{
assertEqual( verifMail($mail), $output);
}