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