2012-06-04 15 views
5

Perl çağrıları için ölmeyi beklediğiniz testleri yazmak için bir yol var mı? Belirli çağrıların zayıf biçimlendirilmiş girişlerle öleceğini doğrulamak istiyorum.Perl testlerinde ölüm planlaması

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")); 
} 

cevap

6

Test::Exception bakınız:

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

ben [Testi :: Fatal] (http://search.cpan.org/perldoc?Test%3a%3aFatal) Ben de söylediği gibi [Test :: İstisna daha kullanmak kolay bulmaktadır benim Aynı konudaki daha önceki bir soruyu yanıtlayın] (http://stackoverflow.com/a/4522172/8355). – cjm

5

Bir eval { ... } blokta testi sarın ve [email protected] kuruldu olmadığını kontrol edin.

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

Tercihen, testiniz beklenen bir mesajla ölmelidir, böylece varlığını test etmek yerine $ @ değerini kontrol edebilirsiniz. –

İlgili konular