Как смоделировать стандартные функции perl opendir и readdir? - PullRequest
0 голосов
/ 26 января 2019

Я пишу тест для функции, которая получает список всех *.pm файлов в текущем каталоге.

Вот функция:

sub get_inspected_modules_list {
    my ( $dir ) = @_;
    opendir(my $dh, $dir) or die $!;
    my @files;
    while (my $file = readdir($dh)) {
        next unless (-f "$dir/$file");   # skip nested dirs
        next unless ($file =~ m/\.pm$/); # push only *.pm
        push @files, $file;
    }
    closedir($dh);
    return \@files
}

Я пытался использовать Тест:: MockFile :: DirHandle для теста, но он печатает No such file or directory ошибка:

subtest "get_inspected_modules_list" => sub {

    my $handle = Test::MockFile::DirHandle->new(
        "/fake/path", 
        [qw/Foo.pm Bar.pm Baz.pm test.txt 1.pl/]
    );

    warn Dumper get_inspected_modules_list( '/fake/path' ); # error

};

Как смоделировать вызовы opendir / readdir?

1 Ответ

0 голосов
/ 30 января 2019

Правильное использование

my $mocked_dir = Test::MockFile->dir("/fake/path", [ 'Foo.pm', 'bar.pl' ] );

opendir(my $dh, "/fake/path") or die $!;
while (my $file = readdir($dh)) {
    print "$file ";    # will print '. .. Foo.pm bar.pl'
}        

undef $mocked_dir;

Итак, вместо Test::MockFile::DirHandle вы должны использовать Test :: MockFile-> dir

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...