私は現在、単体テストを学んでいます。これを行うために、私は職場でスクリプトを書いています。スクリプト全体の単体テストを作成しています。これまでのことはうまくいっていますが、コマンドラインがヘルプメッセージをトリガするスクリプトフォームに入力された不正なデータをテストしようとしています。Try :: Tinyを使用してPerlスクリプトでpod2usage exitを「キャッチ」するにはどうすればよいですか?
私のコードのようなものになります。
sub getContext{
my ($help) = @_;
GetOptions(
help|h => \$help,
...
pod2usage if $help;
...
}
のように私のテストは何かを見て:
1..4
ok 1 - use scripts::scriptname;
ok 2
ok 3
# Looks like you planned 4 tests but ran 3.
# Looks like your test exited with 1 just after 3.
:私の出力が非常に似ています
my $help_exception = 0;
try{
getContext({help => 0});
}catch{
$help_exception = 1;
}
ok($help_exception, "Script died correctly when given help flag");
を
helpフラグのテストはtest 4です。Try :: Tiny try catchブロックをトリガーせずにスクリプトが終了しているようです。この問題を解決する方法はありますか、私はテストを別に書くべきですか?
prove
はご回答いただき、誠にありがとうございからCapture::Tiny –出力を使用して、どのようにCORE :: GLOBAL :: EXITオーバーライドをローカライズするのでしょうか? – Moses
'local'組み込み関数を使用しています。 – rafl