2012-06-04 16 views
5

死ぬと予想されるPerlコールのテストを書く方法はありますか?私は、特定の呼び出しがフォーマットの悪い入力で死に至ることを確認したいと思います。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")); 
} 

答えて

6

Test::Exceptionを参照してください:

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

私はテストよりも使いやすいように[テスト::致命的](http://search.cpan.org/perldoc?Test%3a%3aFatal)を見つける::例外、私が言ったように私同じテーマについての以前の質問への回答](http://stackoverflow.com/a/4522172/8355)。 – cjm

5

あなたはeval { ... }ブロック内のテストをラップし、[email protected]が設定されたかどうか確認してください。

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

あなたのテストは、メッセージの存在をテストするのではなく、$ @の値をチェックできるように、期待されるメッセージでテストが終了するのが望ましいです。 –

関連する問題