Version 1.0.0 - 2006/01/31

4.6 Débugue et Tests unitaires

Durant le cycle de développement vous serez très souvent amené à tester et valider vos productions. Une technique très simple consiste à observer le comportement de son application en plaçant des boucles conditionnelles et des affichages superflus un peu partout. Cette technique ralentie l’exécution des scripts, pollue votre code et le rend quasiment immaintenable. De plus cela vous donne du travail supplémentaire lorsque vous devez les retirer. Une meilleure façon de procéder est d’externaliser ces tests. Non seulement vous disposeriez d’une manière rapide et efficace de tester vos applications dans son ensemble, ce qui ne doit jamais remplacer un contrôle manuel, mais vous n’aurez également pas besoin de modifier des lignes de code valider pour nettoyer vos sources. Le framework met à votre disposition des classes vous permettant d’observer le contenu des variables en temps réel ou en différé et d’effectuer des batteries de tests unitaires. Les patterns utilisés pour implémenter les tests unitaires sont directement inspiré de JUNIT. Nous vous conseillons de lire la documentation.
En utilisant Noas PHP, vous découvrirez qu’il est assez rare d’employer des fonctions telles que echo() qui sont quasiment à proscrire. En contre partie le framework met à votre disposition des classes adaptées. Ces classes, de type NoasDumpContext, représente des contextes de description.
    Le listing suivant nous présente une utilisation de NoasDumpContext. NoasDumpManager  est une classe permettant de référencer et gérer les contextes de description d’une application. Vous pouvez ainsi, comme dans l’exemple, définir une référence de contexte de description et ensuite l’utiliser sans ce se soucier de son type (temps réel, différé sur fichier, etc.). Vous devez impérativement ouvrir et fermer le contexte de description, il peut s’agir d’une socket ou d’un fichier ou autre chose nécessitant une notification d’ouverture. Une fois que ceci est fait, vous avez tout le loisir de décrire vos variables.

Manageur de contexte de description

<?php
Noas::import('noas.network.http.NoasHttpDumpContext');
...
 NoasDumpManager::setContext('DEFAULT',
                                    new NoasHttpDumpContext(true, 'MAIN'));
...
if(NoasDumpManager::isDefined('DEFAULT')){
 $oDumpContext = NoasDumpManager::getContext('DEFAULT');
 $oDumpContext->open();
 $oDumpContext->trace('Début du test....');
 $oDumpContext->dump_var('variable1', $var1);
 $oDumpContext->dump_var('variable2', $var2);
 $oDumpContext->dump_object('objet1', $objet1);
 $oDumpContext->trace('Fin du test....');
 $oDumpContext->close();
}
...
?>
Le listing suivant montre une implémentation de teste unitaire. Il n’est pas complexe, mais vous pouvez imaginer les cas de test les plus compliqués, il n’y a plus de crainte à avoir au sujet du ralentissement puisque ce dernier est exécuté « hors » de l’application. Comme vous pouvez le constater, les classes de teste utilisent le contexte de description pour l’affichage des résultats.

Implémentation de test unitaire

<?php
Noas::import("noas.unit.NoasTestCase");
class UnitDcTestCase extends NoasTestCase {
  function __construct(){
   parent::__construct("UnitDcTestCase");
  } 
  protected function runTest(NoasDumpContext $dc){
    $dc->trace($this->name);
    $variableInt = 233;
    $variableSring = "webobject";
    $dc->dump_var("int", $variableInt);
    $dc->dump_var("srting", $variableSring);
    $dc->dump_object("Test description", $this);
    $dc->trace("Ok!");
  }
}
?>
Nous ne pouvons pas clore cette section sans dire un mot sur l’interface NoasDump. Tous les objets implémentant cette interface doivent être capables de se décrire tout seul sur un contexte. Cela vous permet entre autres de ne pas avoir à décrire un
Objet pour chaque test.

 

© 2005 Réoka Djohou, tous droits réservés.