2009-10-01 13 views
6

Mam skrypt testowy Perl napisany przy użyciu Test::More. Tuż przed wyjściem i jeśli wszystkie testy minęły, chciałbym wykonać pewne czynności porządkowe. Jeśli jakiekolwiek testy się nie powiodą, chcę wszystko pozostawić na miejscu, aby rozwiązać problem.Czy mogę stwierdzić, czy wszystkie testy przeszły test Perla: Więcej?

Czy jest flaga pod numerem Test::More lub inna najlepsza praktyka w jednym skrypcie testowym, aby stwierdzić, czy "wszystko jest w porządku" po zakończeniu samych testów?

Odpowiedz

10

Można uzyskać dostęp do aktualnego stanu badań z Test::Builder, dostępnego poprzez 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"; 
} 

Alternatywnie, można po prostu zrobić swoje porządki na końcu skryptu, ale wyjście na początku, jeśli coś pójdzie krzywo, z Test::More 's BAIL_OUT("reason why you are bailing");.

Istnieje wiele innych danych i statystyk, które można zebrać na temat stanu testów; zobacz dokumentację dla Test::Builder.

+0

mam nie można zlokalizować metodę obiektu „is_passing” za pośrednictwem pakietu „test :: Builder” w ./put.pl linii 9. z Perl v5 .8.4 z 31 zarejestrowanymi łatami (w systemie Solaris 10): o ( – philant

+0

Mam to również z Testem :: Więcej wersji 0.8, ale miał etter luck z Testem :: Więcej wersji 0.93. – mob

+1

Test :: Builder-> is_passing() został dodany w wersji 0.89_01, zobacz plik CHANGES: http://cpansearch.perl.org/src/MSCHWERN/Test-Simple-0.94/Changes – Ether

0

Oto co wymyśliłem w celu uniknięcia błędu „Nie można zlokalizować obiektu metoda” pokazany na dole tej odpowiedzi:

#! /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"; 
} 

W systemie Solaris 10, z Perl v5.8.4 (z 31 zarejestrowanych łat), mam następujący

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

Musisz zaktualizować swój test :: Prosta dystrybucja - patrz uwagi w drugiej odpowiedzi. – Ether

+0

Wiem, że jesteś pod Solaris, ale na uaktualnieniu ActivePerl Test :: Simple to sposób. Test :: Builder nie ma własnego wpisu PPM w mojej instalacji Win32 5.10. Zajęło mi to kilka minut, więc może ta notatka uratuje kogoś innego. – aczarnowski

Powiązane problemy