2012-06-04 1 views
5

Có cách nào để viết các bài kiểm tra cho các cuộc gọi Perl mà bạn muốn chết không? Tôi muốn xác minh rằng một số cuộc gọi nhất định sẽ chết với các đầu vào được định dạng kém.Lập kế hoạch cho các trường hợp tử vong trong các thử nghiệm perl

sub routine_a { 
    my $arg = shift; 
    die if $arg eq 'FOO'; 
    print "routine_a: $arg\n"; 
} 
sub routine_b { 
    my $arg = shift; 
    die if $arg eq 'BAR'; 
    print "routine_b: $arg\n"; 
} 

sub test_all { 
    assert(routine_a("blah")); 
    assert(routine_b("blab")); 
    assert_death(routine_a("FOO")); 
    assert_death(routine_b("BAR")); 
} 

Trả lời

6

Xem Test::Exception:

use Test::Exception; 
dies_ok { $foo->method } 'expecting to die'; 
+2

Tôi tìm thấy [Test :: Fatal] (http://search.cpan.org/perldoc?Test%3a%3aFatal) để dễ sử dụng hơn Test :: Exception, như tôi đã nói trong [ trả lời cho một câu hỏi trước đó về cùng một chủ đề] (http://stackoverflow.com/a/4522172/8355). – cjm

5

Bạn quấn thử nghiệm bên trong khối eval { ... } và kiểm tra xem [email protected] được thành lập.

eval { test_thats_supposed_to_fail() }; 
ok([email protected] , "test failed like it was supposed to"); 
+0

Tốt hơn là thử nghiệm của bạn nên chết với một thông báo dự kiến, để bạn có thể kiểm tra giá trị của $ @ thay vì chỉ kiểm tra sự tồn tại của nó. –