Tests unitaires avec simpletest dans Jelix
Par Laurentj le dimanche, février 5 2006, 23:43 - Projets - Lien permanent
Ce week-end, je viens de terminer l'implémentation de la prise en charge d'urls significatives dans Jelix. En gros, vous pouvez définir n'importe quel URL pour chaque action définie dans Jelix.
Mieux que ça même, Jelix vous génère l'url correspondante à une action donnée. Indiquez simplement un nom d'action et de module à Jelix, avec éventuellement des paramètres, et Jelix vous génère l'url correspondante.
$string_url = jUrl::get("news~view@classic", array("id_news"=>"54"));
Ici, on demande l'url qui correspond à l'action view du module news, avec un paramètre id_news. jUrl renverra l'url correspondante définie dans un fichier xml centralisant le "mapping". Il y a bien sûr un plugin correspondant "à la smarty" pour le moteur de template.
Ce système permet ainsi de réutiliser un module ou un template dans plusieurs applications, sans avoir à modifier d'url dans le code. Tout se fait automatiquement. Il n'y a plus besoin de mettre des urls en dur dans les templates ou le code.
C'est quelque chose d'assez complexe à mettre en place. Pour tester ce moteur d'url, et éviter des régressions plus tard quand j'effectuerai des modifications, j'ai écris une serie de tests unitaires, qui teste plusieurs cas différents, tant pour l'analyse d'un url pour en déduire une action et un module, que pour la génération d'url à partir d'une action.
J'ai utilisé pour cela la bibliothèque SimpleTest, qui facilite la mise en place de tests unitaires. Elle est particulièrement bien foutu, et codée proprement. Un de ses avantages est de pouvoir indiquer un "moteur" d'affichage des résultats. Ce qui m'a permis de l'intégrer trés facilement dans un module Jelix et de réutiliser le système d'affichage de Jelix.
J'ai du toutefois hacker Simpletest pour supprimer des erreurs de notification PHP de type "strict". Simpletest est compatible PHP5, mais il y a toutefois quelques trucs qui provoquent ces "notices" (genre des $foo = & new bar(), le & étant obsolète pour ce cas de figure dans PHP5). Ce qui est déplaisant car dans Jelix, j'active la prise en charge de **toutes** les erreurs PHP et elles s'affichent donc dans la page HTML résultat. Bref, si vous voulez une version non officielle "spéciale" PHP5 (qui ne fonctionne plus dans PHP4, sans toutefois être optimisée pour PHP5), vous pouvez la récupérer dans le dépot subversion de Jelix (trunk/lib/simpletest).
Commentaires
Riche idée, pouvoir faire des tests unitaires dans un framework PHP, c'est un gros plus. Ca manque à Copix mais bon, tu ne fais pas la compet' avec Copix, n'est-ce pas ;-)))
à donf :-)
(je plaisante hein :-) )
Heureux de voir que tu es passé à SimpleTest. Juste bizarre de voir que tu sois le premier à dégainer sur ce sujet. Alors que c'est à Gérarld que j'ai fait une démo pendant Solutions Linux. Sinon juste une chose : la dernier version de SimpleTest (publié aujourd'hui : 1.0.1alpha3) corrige toutes ces erreurs. Elle est donc full PHP5 compatible.
Perrick : j'osais pas installer une alpha :-) Mais vais peut être le faire :-)
@perrick > S'il dégaine en premier, c'est juste pour être taquin ;-)
@Nicolas > ça arrive aussi sous Copix, pour le moment seules quelques classes de base sont "unit testées" (Selector, DB, DAO, Filewriter), ... Mais on attend de se faire la main dessus pour l'intégrer "officiellement".
Tu es au courant que le mode d'erreur strict n'est à utiliser que pour le développement et pas en production ?
Et pourquoi donc ? Si j'ai envie de mettre en mode strict, je met en mode strict. J'ai pas peur de la qualité de mon code, moi Monsieur ! ;-) Et puis, ça tombe bien, les tests unitaires sont éffectuer pendant le dev ;-)