PHP en mode interactif et les tests unitaires

le 12/05/2008 à 23:12
PHP en mode interactif et les tests unitaires
L'option -a de PHP-CLI (en ligne de commande), active le mode interactif de PHP. C'est un mode où les instructions seront exécutées au fur et à mesure que vous les tapez.


$ php -a
Interactive mode enabled

html
<?php
html
echo phpversion();
5.2.6 ?>

Notez que c'est difficile à comprendre sur l'exemple ci-dessus : PHP commence par produire les deux premières lignes. Puis, j'ai tapé html, qui est affiché une deuxième fois plus bas, quand PHP décide d'exécuter le code HTML initial. En effet, le mode interactif se comporte comme PHP, et affiche directement le texte qui n'est pas dans une balise.

Ensuite, je met des commandes complètes (ici, PHPversion()), qui est affichée immédiatement après. Au final, je ferme la balise.

Ce mode est pratique si vous voulez tester une fonction ou un bout de code PHP. En en discutant avec Chris Hartjes (si vous avez l'occasion, allez le voir en conférence), ce mode est très pratique pour mettre en place les tests unitaires : il l'a fait pour cakePHP.

Imaginez, vous avez programmé une fonction (ou une classe, ou une bibliothèque, etc). Pour la vérifier, vous l'exécutez avec le mode interactif, et vous vérifiez manuellement que tout se passe bien. Par exemple, avec une fonction qui teste si un nombre est premier (retourne 0 si oui, et un facteur sinon), on pourrait avoir ceci :

<?php
include('prime.php');
print is_prime(4);
4
print is_prime(7);
0
print is_prime(13);
0
print is_prime(49);
0
?>

Je viens de tester 4 valeurs, et j'ai identifié un bug (49). Idéalement, je vais retourner dans mon code, le corriger. Mais cette liste de tests manuels pourrait (devrait) être gardée pour être rejouée la prochaine fois ! Pourquoi ne pourrait-elle pas être enregistrée, pour que je gagne du temps plus tard? Et pour être publié avec mon code, dans un format plus standard (phpunit, simpletest) ? On aurait ainsi une méthode simple pour capter des tests unitaires, et capitaliser sur cette masse immense de tests manuels, qui sont perdus après chaque exécution.

- Testing PHP with the interactive shell
- Screencast: Interactive Console for CakePHP

Commentaires

Ecrire

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours