Un autotesteur

Dim 23 novembre 2008

C'est un projet qui vaut ce qu'il vaut ; et d'ailleurs je suis loin d'être assez malin pour en avoir eu l'idée originale. En fait, c'est Jeff Winkler qui m'avait donné un petit coup de pouce pour que je démarre.

Le problème

Quand on utilise la méthodologie TDD, voilà comment se passe une session de codage. On rajoute un test à notre batterie, on le lance, il échoue (ou alors il réussit, mais c'est assez rare), puis on se met à coder, on trifouille le code et ensuite on relance la batterie de tests jusqu'à ce qu'ils passent.
La partie un peu rébarbative, c'est de passer de l'éditeur à un shell système pour lancer les tests, constater le résultat, puis repasser à l'éditeur et aller-retour et blablabla.

Début de solution

Le script nosy.py de Jeff Winkler est certes un bon départ. Il crée une sorte de catalogue des fichiers présents dans un projet, et si l'un d'entre eux est modifié, nosy.py lance "nosetests". Il faut savoir que nosetests est un utilitaire qui lance des tests unitaires dans un projet Python. Très très pratique...

Le hic

Mais pour, par exemple, quelqu'un qui utilise Django, nosetests n'est pas follement bien intégré. Le lancement des tests sous Django est une commande interne :

$ python manage.py test

Le code

Donc m'est venue l'idée de rendre plus flexible nosy.py est de permettre l'utilisation de plusieurs utilitaires de tests, au choix de l'utilisateur.

Le code de ce petit "test daemon" est disponible sur github. Pour le récupérer (une fois git installé) :

$ git clone git@github.com:brunobord/tdaemon.git

Seul le script tdaemon.py compte, il suffit de le rendre exécutable et accessible dans un chemin et de le lancer avec une commande du genre :

$ python /chemin/vers/tdaemon.py /chemin/vers/projet/

Par défaut, tdaemon utilise nosetests comme utilitaire, mais on peut également lancer py.test et le testeur de django. Je n'ai pas fait le test, mais je suis persuadé qu'on peut lancer n'importe quel autre utilitaire via cet outil, pour peu qu'il soit implémenté dans le programme (amis railistes ou symfoniens, c'est à vous que je parle).

Bien entendu, je suis tout ouïe sur les diverses améliorations qu'on pourrait y apporter, et / ou rapports de bugs, etc. Ce bout de code est loin d'être parfait, mais au moins, sur des petits projets, il a le mérite d'être fonctionnel.

(d'ailleurs, tant qu'on y est, je me mets doucement à git et ce petit projet peut m'aider à apprendre à mieux me servir de ce DCVS - de github, par-dessus le marché. J'avoue que mon esprit est plus perméable à la logique bazaar, et que git m'est déroutant.)

Enjoy!