At(ch)oum

Les tests unitaires, c’est bien, ça facilite la maintenance et les évolutions, mais ils ont un gros défaut : il faut les élaborer et les tester et parfois c’est de l’ordre de l’arrachage de cheveux !

J’ai passé la quasi totalité de la journée d’hier à me battre pour mettre en place des tests unitaires d’une nouvelle classe de compression Zip, pouvant utiliser trois méthodes différentes1 et capable de fournir l’archive dans un fichier ou dans un flux, comme php://output.

Sauf que dès qu’on commence à jouer avec le système de fichier il faut tenir compte de ses particularités, comme sa propre gestion du cache, les délais entre les demandes d’écriture et les écritures physiques sur le disque et j’ai alors tâtonné en ajoutant des pause, ici et là, dès que je testais la présence ou les metadata des fichiers.

L’avantage d’avoir écrit tout ça c’est que j’ai trouvé deux ou trois bugs dans la classe, rien de grave, mais potentiellement gênants dans des cas de figure un peu tordus, et loi de Murphy aidant, c’est toujours les cas tordus qui sont sollicités en production, sinon c’est pas drôle, n’est-ce pas ?

Bref, je vais pouvoir m’attaquer à la classe de décompression Unzip, avec ses propres tests — croisés probablement, en partie, avec ceux de la classe de compression Zip — pour enfin obtenir quelque chose de robuste en vue de remplacer celles qu’on utilise depuis des lustres pour l’installation rapide, la mise à jour, la gestion des thèmes et plugins, la sauvegarde des médias (en fait c’est déjà en place pour la prochaine 2.26), etc…

Pour résumer, Atoum (l’utilitaire utilisé pour construire les tests unitaires PHP de Dotclear) c’est bien, mais des fois ça casse bien la tête !


  1. Utilisant la classe PharData si possible, sinon la classe ZipArchive, sinon les fonctions historiques de feu Clearbricks ↩︎

Ajouter un commentaire

Les champs suivis d'un * sont obligatoires

Les commentaires peuvent être formatés en utilisant la syntaxe Markdown Extra.

Ajouter un rétrolien

URL de rétrolien : https://open-time.net/trackback/15646

Haut de page