2009-10-01 41 views
6

Tôi có một tập lệnh thử nghiệm Perl được viết bằng cách sử dụng Test::More. Ngay trước khi thoát, và nếu tất cả các bài kiểm tra đã trôi qua, tôi muốn thực hiện một số hành động dọn dẹp. Nếu bất kỳ kiểm tra nào không thành công, tôi muốn để mọi thứ được khắc phục sự cố.Tôi có thể nói nếu tất cả các bài kiểm tra được chuyển qua Bài kiểm tra của Perl :: Thêm?

Có cờ trong phạm vi Test::More hoặc một số phương pháp hay nhất khác trong một tập lệnh thử nghiệm để biết "tất cả đều tốt" khi bản thân bài kiểm tra đã hoàn tất chưa?

Trả lời

10

Bạn có thể truy cập vào tình trạng hiện tại của các bài kiểm tra với Test::Builder, có sẵn thông qua 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"; 
} 

Ngoài ra, bạn có thể chỉ cần làm sạch của bạn ở phần cuối của kịch bản, nhưng lối ra sớm nếu mọi thứ không như mong đợi, với Test::More 's BAIL_OUT("reason why you are bailing");.

Có rất nhiều dữ liệu và thống kê khác mà bạn có thể thu thập về trạng thái thử nghiệm của mình; xem tài liệu cho Test::Builder.

+0

tôi đã có không thể định vị phương pháp đối tượng "is_passing" thông qua gói "Test :: Builder" tại dòng ./put.pl 9. với Perl v5 .8.4 với 31 bản vá lỗi đã đăng ký (trên Solaris 10): o ( – philant

+0

Tôi cũng nhận được điều này với Kiểm tra :: Phiên bản khác 0.8, nhưng có b etter luck with Test :: Phiên bản khác 0.93. – mob

+1

Test :: Builder-> is_passing() đã được thêm vào trong phiên bản 0.89_01, xem tệp CHANGES: http://cpansearch.perl.org/src/MSCHWERN/Test-Simple-0.94/Changes – Ether

0

Dưới đây là những gì tôi đã đưa ra để nhằm tránh các lỗi "Không thể xác định vị trí phương pháp đối tượng" hiển thị ở phía dưới cùng của câu trả lời này:

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

Trên Solaris 10, với Perl v5.8.4 (với 31 bản vá lỗi đăng ký), tôi đã nhận như sau

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

Bạn cần nâng cấp Kiểm tra của mình :: Phân phối đơn giản - xem ghi chú trong câu trả lời khác. – Ether

+0

Tôi biết bạn đang dưới Solaris, nhưng trên ActivePerl nâng cấp thử nghiệm :: Đơn giản là cách. Test :: Builder không có mục PPM riêng trong bản cài đặt Win32 5.10 của tôi. Tôi mất vài phút để theo dõi nên có lẽ ghi chú này sẽ tiết kiệm thời gian cho người khác. – aczarnowski

Các vấn đề liên quan