Я собираю набор подпрограмм, которые являются общими для набора моих скриптов, в модуль.(Я должен был сделать это раньше, но начал с унаследованных сценариев.) Я моделирую свою работу на очень полезном примере здесь , используя Test :: More и Module:: Build
Все подпрограммы, которые читают или пишут из файлов, содержат строку open() or die "errmsg"
.Я в процессе написания теста для модуля и столкнулся с этой проблемой.Одна из подпрограмм проверяет, указывает ли путь на что-либо или нет, умирает при неудаче.В унаследованных сценариях подпрограмма выглядит следующим образом:
sub checkExist {
my ($type, $path) = @_;
if ($type eq 'd') {
if (! -d $path) {
warn("dir not found: $path\n");
die $pathNotFound;
}
}
elsif ($type eq 'f') {
if (! -f $path) {
warn("file not found: $path\n");
die $pathNotFound;
}
elsif (! -s $path) {
warn("empty file: $path\n");
die $emptyFile;
}
}
}
Теперь я проверяю это со следующей строкой:
is(HomeBrew::IO::checkExist('f', $0), '', "can checkExist find file $0 ?");
, которая работает нормально, если я не выберу путь, которыйне существует, и в этом случае тестовый скрипт умирает, но тест завершается успешно , производя следующий вывод:
# Looks like your test exited with 2 just after 5.
Dubious, test returned 2 (wstat 512, 0x200)
All 5 subtests passed
Я бы предпочел, если бы это был неудачный тест(а не сомнительный проход), но так как это устаревший код, я также хочу, чтобы эта подпрограмма остановила выполнение при сбое.Что делать?Глупо ли писать тест для такой простой функции?
Я уже написал функцию checkExist2, которую я буду использовать в будущем, которая возвращает undef при успехе, в противном случае ненулевая ошибка (поэтому я могу написать die if checkExist2()
в другом месте).Приветствуются другие предложения, которые не поддерживают функциональность checkExist.