2012-06-04 2 views
5

Gibt es eine Möglichkeit, Tests für Perl-Aufrufe zu schreiben, die Sie erwarten zu sterben? Ich möchte überprüfen, dass bestimmte Anrufe mit schlecht formatierten Eingaben absterben.Planung für Todesfälle in Perl-Tests

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

Antwort

6

Siehe Test::Exception:

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

Ich finde [Test :: Fatal] (http://search.cpan.org/perldoc?Test%3a%3aFatal) werden einfacher zu benutzen als Test :: Ausnahme, wie ich in der [meine Beantworten Sie eine frühere Frage zum selben Thema] (http://stackoverflow.com/a/4522172/8355). – cjm

5

Sie wickeln den Test in einem eval { ... } Block und prüfen, ob [email protected] gesetzt wurde.

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

Vorzugsweise sollte Ihr Test mit einer erwarteten Nachricht enden, so dass Sie den Wert von $ @ überprüfen können, anstatt nur seine Existenz zu testen. –

Verwandte Themen