Test::ExceptionではなくTest::Fatalをお勧めします。
Test :: Exceptionは長い間存在していたため、既存のテストスイートの多くがそれを使用していますが、Test::Fatalの方が習得が容易です。Test :: Fatalは1つの関数のみをエクスポートします:exception
。これにより、関連付けられたコードが実行され、スローされた例外、またはエラーなしで実行された場合の例外が返されundef
ます。次に、通常のTest :: More関数(、、、、、などis
)を使用してその戻り値をテストisnt
しlike
ますisa_ok
。
throws_ok
Test :: Exceptionでは、やなどの独自のテスト関数を学習する必要がありますdies_ok
。また、コードとテスト名の間にコンマを入れないように注意してください。
したがって、あなたの例は次のようになります。
use Test::More;
use Test::Fatal;
my $obj = ...;
isnt(exception { $obj->method($my, $bad, $params) },
undef, 'method dies as expected');
like
または、予期されるエラーメッセージを照合するため、またはisa_ok
例外オブジェクトの正しいクラスをスローしたかどうかをテストするために使用できます。
Test :: Fatalは、Test::Exceptionよりも少ない学習曲線で柔軟性を提供します。