Accueil > Réalisations > Projets Libres > TestBuilder

TestBuilder

samedi 27 février 2010, par Cedric Morin

SPIP-Contrib.net"> Voir l'article original

Un plugin pour aider les développeurs de plugin à écrire plus vite leurs tests. Et les encourager à en écrire plus souvent !

Avertissement

Ce plugin est un outil de développement. Il a tout son intérêt installé sur votre machine de développement, mais il est très vivement déconseillé de l’installer sur un serveur en ligne car il manipule les scripts PHP dans l’arborescence de votre site et permet de lancer l’exécution de code PHP arbitraire.

Installation

Le plugin s’installe classiquement. Il ne crée pas de table dans votre base de données. PNG Vous devez également installer les tests/ à la racine de SPIP. Si vous comptez ajouter des tests de fonctions de SPIP, vous devez installer le répertoire par SVN pour pourvoir ensuite publier vos ajouts :

Si vos tests concernent uniquement des plugins, vous pouvez utiliser l’archive http://files.spip.org/spip-zone/tests.zip qui contient la dernière version des tests mise à jour toutes les heures. Il vous suffira de déposer le répertoire tests/ à la racine de votre site.

Naviguer dans vos scripts

Un menu TestBuilder apparaît dans votre menu configuration (ou administration). Il vous permet d’accéder à l’interface du plugin qui vous permet de naviguer dans les répertoires de votre site pour sélectionner le script PHP pour lequel vous souhaitez faire des tests. PNG Naviguez jusqu’au répertoire contenant le script pour lequel vous voulez écrire des tests : PNG Puis cliquez sur le nom du script

Liste des fonctions et des tests

TestBuilder vous présente alors la liste des fonctions argumentées de votre script, et la présence éventuelle d’un test existant. Les tests sont repérés par l’homonymie avec le nom de la fonction, et recherchés dans le répertoire tests/ à la racine de votre site, ou dans les plugins de SPIP. Sinon vous pouvez créer un nouveau test pour votre fonction. PNG Lorsqu’un test existe il vous est possible de le modifier [1]

Ajouter des jeux d’essai à votre test

Lorsque vous demandez à créer un test pour une fonction, TestBuilder vous présente un formulaire de saisie des essais. Il comporte une vue du code de la fonction à tester, ce qui vous permet de l’avoir sous les yeux, et notamment les commentaires qui la précèdent ou qu’elle contient. Dans notre exemple, nous allons construire un test pour la fonction tb_export qui fait juste un appel à la fonction var_export avec le second argument à true. PNG Le formulaire vous propose un champ de saisie par argument de la fonction ainsi que pour le résultat attendu de la fonction. Vous devez saisir dans ces champs une expression PHP valide (une chaine doit par exemple être entre guillemets). Le bouton ’Tester’ vous permet de vérifier la pertinence de votre essai ou son bon fonctionnement : il vous présente le résultat de l’appel de la fonction avec les arguments que vous avez saisis [2]. Si vous n’avez pas indiqué de résultat attendu, celui-ci est pré-rempli lors de ce test à blanc. Sinon, il est comparé et le message vous indique un succès si ce que vous avez indiqué correspond effectivement au retour de la fonction. Ici on vérifie que notre fonction exporte la chaine ’toto’ en expression PHP valide. PNG Si votre fonction possède plusieurs arguments, dont certains facultatifs, vous pouvez laisser les champs correspondant vides, ils seront ignorés lors de la construction de l’appel de la fonction. Lorsque votre essai vous semble bon, vous pouvez l’ajouter au test avec le bouton « Ajouter ». TestBuilder va alors créer le fichier de test si nécessaire, et y écrire l’essai que vous venez d’indiquer. PNG Vous pouvez ajouter votre essai directement, sans spécifier de résultat et sans passer par le bouton « Tester ». Le résultat attendu sera alors retrouvé automatiquement par TestBuilder en exécutant la fonction avec les arguments que vous lui avez fourni. Pour cela, TestBuilder rejoue tout le jeu d’essai dans l’ordre, dans un contexte vierge, afin de trouver le résultat correct qui peut être influencé par les essais précédents. Le fichier de test est rangé dans un répertoire tests/ du plugin contenant le script PHP sur lequel vous travaillez, ou dans le répertoire tests/ à la racine de SPIP si il s’agit d’un script de SPIP. Un lien vers le script de test vous permet de l’exécuter pour vérifier son fonctionnement.

Tests combinatoires automatiques

Écrire les essais à l’unité est utile pour traiter les cas particuliers intéressant connus. Mais il peut être aussi utile d’écrire des tests sytématiques en fonction du type des arguments. Pour cela vous pouvez indiquer pour chaque champ un pseudo-type correspondant à un jeu d’essai (string, date, array, int ... les pseudo-types disponibles sont rappelés en colonne latérale), et utiliser le bouton « Jeu de tests combinatoires ». TestBuilder génère alors une série d’essais constitués de toutes les combinaisons possibles à partir d’une liste de valeurs intéressantes pour chaque pseudo-type. PNG Vous pouvez ainsi générer très vite une grande série de tests systématiques qui vous permettront de détecter des cas non prévus ou erronés, et de valider la robustesse de la fonction. Lorsque TestBuilder génère ces tests, il élimine les tests en double qui sont caractérisés par des arguments et un résultat identiques. Vous pouvez étendre ou personnaliser la liste des pseudo-types et des essais de base pour chaque en surchargeant le fichier inc/tb_essais_type.php. Cela vous permet de gérer tous les cas particuliers. Si vos pseudo-types et/ou vos essais sont génériques, pensez à les reverser dans le plugin pour en faire profiter toute la communauté !

Modification d’un jeu d’essai

Chaque jeu d’essai existant est listé sous le formulaire de saisie. Vous pouvez supprimer un jeu d’essai qui ne vous convient pas avec le bouton « X », ou le modifier avec le bouton idoine. PNG L’essai en cours de modification est exposé dans la liste, et le bouton d’enregistrement « Modifier » vous indique que vous êtes en train de modifier un essai. Celui-ci sera enregistré à la même place dans la série d’essais.

Jouer les tests

Les tests de SPIP sont joués en visitant simplement le répertoire /tests/ de votre site SPIP. Vous pouvez alors voir que votre script de test a été pris en compte et joué avec tous les autres. PNG En exécutant régulièrement les tests, vous avez un aperçu de la conformité globale de votre code au fur et à mesure de vos développements et vous pouvez détecter immédiatement des régressions sur les fonctions dont vous avez écris les tests au fur et à mesure.

Script de test

Le script de test généré dans notre exemple figure ci-dessous. TestBuilder génère les scripts sur la base de templates/function.php présent dans le plugin, que vous pouvez surcharger pour vos besoins. Il repose sur une fonction nommée essais_nomdelafonctionatester qui doit renvoyer le jeu d’essais à tester.

Notes

[1Attention, cette fonctionnalité n’est opérationnelle que pour les tests qui ont été créés par TestBuilder. Si votre script a été créé manuellement antérieurement, TestBuilder ne retrouvera pas les jeux d’essai qu’il contient. Par ailleurs, il y ajoutera les jeux d’essais que vous définissez via l’interface sans casser le reste de votre fichier, mais il vous appartiendra d’ajouter à votre script les quelques lignes nécessaires au test de ces jeux d’essai.

[2Attention, avec le bouton « tester », la fonction est exécutée dans le contexte de ecrire/ alors que dans toutes les autres situations, la fonction sera testée dans le contexte public de SPIP

SPIP-Contrib.net"> Commenter l'article original