Place très importante des tests dans le cycle de développement
de Perl même, plus de 11 000 tests unitaires
des modules CPAN, exécutés avant l'installation
Principe émetteur - récepteur
Protocole unidirectionnel
Suite de ok et not ok
Combiné avec les directives SKIP et TODO
Fournit des sémantiques équivalentes aux extensions DejaGnu de POSIX 1003.3
ok - PASS - le test est passé avec succès
not ok - FAIL - le test a échoué
ok # SKIP - SKIP - le test a été délibérément sauté
not ok # TODOFAIL - le test a échoué de manière attendue
ok # TODOPASS - le test a réussi alors qu'on s'attendait à ce qu'il échoue
Première vertu du programmeur : paresse
Modules générateurs de TAP
Temps Anciens, utilisation de magie noire
Moyen-Âge, utilisation de Test.pm
Temps Modernes, utilisation de Test::More et dérivés
Fournit des sémantiques de haut niveau
Vérification booléenne : ok()
ok( defined $reservoir, "\$reservoir est défini" );
Vérification d'égalité ou d'inégalité : is(), isnt()
is( $reservoir->type_carburant(), 'cosmogol', "type de carburant" );
isnt( ref $shadok, 'Gibi', "un Shadok n'est pas un Gibi" );
Vérification par correspondance : like(), unlike()
like( $numero, '/^(?:bu|zo|meu)(?:ga|bu|zo|meu)$/',
"le numéro est-il une séquence valide ?" );
Vérification de structure : is_deeply()
is_deeply(
$trajet,
[ "Prima", "Dua", "Tierza" ]
"vérification du trajet",
);
Vérification de chargement : use_ok(), require_ok()
# chargement d'un fichier
require_ok('init.pl');
# chargement d'un module
require_ok('Rocket::Engine');
# importation d'un module
use_ok('Rocket::Engine');
Sémantique permet d'offrir des erreurs détaillées
Exemple : échec d'un is()
not ok 17 - type de carburant
# Failed test (t/reservoir.t at line 53)
# got: 'essence ordinaire'
# expected: 'cosmogol'
Exemple : échec d'un require_ok()
not ok 3 - require Rocket::Engine;
# Failed test (-e at line 1)
# Tried to require 'Rocket::Engine'.
# Error: Can't locate Rocket/Engine.pm in @INC
Analyse du flux TAP par Test::Harness
Fournit une vision condensée de la session de test
Exécution par make test
$ make test
t/00_basic........# testing Regexp::Assemble v0.15
t/00_basic........ok
t/01_insert.......ok
t/02_reduce.......ok
t/03_str..........ok
t/04_match........ok 9582/14861
Exécution par prove :
$ prove -b t/01api.t
Définit le protocole TAP
En cours de récriture totale
Euphémisme poli pour signifier que Test::Harness sera abandonné
et remplacé par un nouvel environnement
TAP 2.0
Encore en cours de développement
Mais des analyseurs déjà disponibles
TAP::Parser par Michael Schwern
TAPx:::Parser par Curtis Poe (Ovid)
Perl Testing: A Developer's Notebook
par Ian Langworth et chromatic,
O'Reilly & Associates, 2005, ISBN 0-596-10092-2
Perl Best Practices
par Damian Conway,
O'Reilly & Associates, 2005, ISBN 0-596-00173-8
Les tests en Perl - Présentation et modules standards
par Sébastien Aperghis-Tramoni et Philippe Blayo,
GNU/Linux Magazine France n°88, novembre 2006