Я сейчас пытаюсь научиться юнит-тестированию. Для этого я пишу скрипт на работе и создаю модульные тесты для всего скрипта. Пока что дела идут хорошо, но я пытаюсь проверить, что неверные данные, введенные в сценарий из командной строки, вызывают сообщение справки.
Мой код выглядит примерно так:
sub getContext{
my ($help) = @_;
GetOptions(
help|h => \$help,
...
pod2usage if $help;
...
}
Мои тесты выглядят примерно так:
my $help_exception = 0;
try{
getContext( {help => 0} );
}catch{
$help_exception = 1;
}
ok($help_exception, "Script died correctly when given help flag");
Мой вывод выглядит очень похоже на:
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.
Тест для флага справки - это тест 4, похоже, что мой скрипт завершает работу, не вызывая блок Try :: Tiny try catch. Есть ли способ исправить это, или я должен писать свои тесты по-другому?