Dernièrement, j'ai écris pour le magazine Programmez! un article au sujet de PHP 5.4 (je remercie au passage Christophe Villeneuve de m'avoir proposé de le faire).

Simultanément, j'ai implémenté dans atoum, mon framework de tests unitaires pour PHP 5.3+, le code nécessaire pour permettre à l'utilisateur via l'annotation @engine de définir la façon dont les tests seront exécutés.

L'annotation @engine inline sur une méthode de test permet donc maintenant de l'exécuter de manière non isolé, ce qui permet de l'exécuter très rapidement, au prix d'une consommation en mémoire potentiellement plus importante et surtout sans aucune garantie qu'une autre méthode de test exécutée inline précédemment n'aura pas une influence sur le résultat.

L'annotation @engine isolate permet quand à elle d'exécuter la méthode concernée dans un processus PHP indépendant afin de l'isoler des autres méthodes de test, mais atoum attendra la fin de l'exécution de la méthode avant de passer à la suivante.

Le test est alors plus lent que lorsque inline est utilisée, mais l'isolation apportée par le processus PHP indépendant garantie qu'il n'y aura pas d'interférences de la part d'autres méthodes de test sur le résultat.

De plus, les éventuelles fuites de mémoire ont dans ce cas un impact quasi nul puisque le processus PHP correspondant à la méthode se terminera une fois cette dernière exécutée. 

L'annotion @engine concurrent combine le meilleur des deux précédentes en permettant aux méthodes de tests sur lesquelles elle est utilisée de s'exécuter de manière isolée et en parallèle, donc rapidement.

Il s'agit donc à la fois du mode d'exécution des méthodes de test traditionnel et par défaut de atoum.

De plus, il est possible de définir un mode d'exécution des méthodes de test par défaut pour l'ensemble des méthodes d'une classe en utilisant l'annotation @engine avec la valeur désirée au niveau de la classe.

Mais évidemment, si une annotation @engine est utilisée sur une méthode, elle prendra le pas sur celle définie au niveau de la classe.

Tout cela va peut être encore évoluer un peu, mais à court terme, il devrait même être possible aux utilisateurs de atoum de définir leur propre moteur d'exécution des méthodes de test et de le mettre en œuvre via @engine, ce qui pourrait ouvrir par exemple la voie à une exécution des tests distribuées sur plusieurs machines et/ou dans le nuage.

Cerise sur le gâteau, le remaniement du code induit par tout cela a permis la correction d'un bug très gênant sous windows, et si tout les tests unitaires ne sont pas encore au vert dans cet environnement, atoum y est cependant maintenant utilisable.

J'ai cependant encore un peu de travail pour que cela soit possible, et en parallèle, je dois préparer mes deux conférences pour le forum PHP 2012 qui aura lieu dans un mois exactement, dont une que je dois préparer en duo avec Ivan Enderlin à distance.

Si on ajoute à cela une vie de famille trépidante, un travail intéressant et prenant, que la fatigue se fait sentir et une envie de profiter des jours de congé offert par le mois de mai, cela explique une baisse de la fréquence de parution de mes billets sur la semaine qui vient de s'écouler.

J'espère cependant que ce n'est que transitoire et que j'arriverais à maintenir un rythme de publication et une qualité suffisante.