2009-10-01 4 views
6

J'ai un script de test Perl écrit en utilisant Test::More. Juste avant de quitter, et si tous les tests sont passés, j'aimerais effectuer des actions de nettoyage. Si les tests échouent, je veux tout laisser en place pour le dépannage.Puis-je savoir si tous les tests passés sous Perl's Test :: More?

Existe-t-il un indicateur au sein de Test::More, ou d'autres bonnes pratiques dans un script de test unique, pour dire si "tout va bien" une fois les tests eux-mêmes terminés?

Répondre

10

Vous pouvez accéder à l'état actuel des tests avec Test::Builder, disponible via Test::More->builder:

use strict; 
use warnings; 
use Test::More tests => 1; 

ok(int rand 2, 'this test randomly passes or fails'); 

if (Test::More->builder->is_passing) 
{ 
    print "hooray!\n"; 
} 
else 
{ 
    print "aw... :(\n"; 
} 

Alternativement, vous pouvez simplement faire votre nettoyage à la fin du script, mais la sortie tôt si les choses tournent mal, avec Test::More's BAIL_OUT("reason why you are bailing");.

Il y a beaucoup d'autres données et statistiques que vous pouvez rassembler sur l'état de vos tests; Voir la documentation pour Test::Builder.

+0

suivant, j'ai Impossible de localiser la méthode objet "is_passing" via package "test :: Builder" à la ligne 9. ./put.pl avec Perl v5 .8.4 avec 31 patchs enregistrés (sous Solaris 10): o ( – philant

+0

J'ai aussi obtenu ceci avec Test :: More version 0.8, mais j'avais b etter chance avec Test :: More version 0.93. – mob

+1

Test :: Builder-> is_passing() a été ajouté dans la version 0.89_01, voir le fichier CHANGES: http://cpansearch.perl.org/src/MSCHWERN/Test-Simple-0.94/Changes – Ether

0

Voici ce que je suis venu dans le but d'éviter l'erreur « Impossible de localiser la méthode objet » indiquée au bas de cette réponse:

#! /usr/bin/perl 

use strict; 
use warnings; 
use Test::More tests => 1; 

ok(int rand 2, 'this test randomly passes or fails'); 

my $FAILcount = 0; 
foreach my $detail (Test::Builder->details()) { 
    if (${%$detail}{ok}==0) { $FAILcount++; } 
} 

if ($FAILcount == 0) { 
    print "hooray!\n"; 
} else { 
    print "aw... :(\n"; 
} 

Sur Solaris 10, avec Perl v5.8.4 (avec 31 patches enregistrés), je suis le

Can't locate object method "is_passing" via package "Test::Builder" 
+0

Vous devez mettre à jour votre test :: Distribution simple - voir les notes dans l'autre réponse. – Ether

+0

Je sais que vous êtes sous Solaris, mais sur ActivePerl mise à niveau de Test :: Simple est le chemin. Test :: Builder n'a pas sa propre entrée PPM dans mon installation Win32 5.10. Il m'a fallu quelques minutes pour traquer, alors peut-être que cette note épargnera du temps à quelqu'un d'autre. – aczarnowski

Questions connexes