如何测试使用File :: ShareDir的模块?

时间:2012-03-12 16:32:40

标签: perl testing perl-module

我正在编写一个模块,使用File::ShareDir::Install在dist目录中安装共享文件。在模块中的主导出函数内,然后使用File::ShareDir找到该文件。

此函数加载共享文件,并在文件中查找字符串。在我的一个测试中,我想检查函数是否返回了一些输入的正确值。所以,测试看起来像:

my @cases = (
    [ 'input1' => 'expected1' ],
    # etc
);

for my $case ( @cases ) {
    my ($input, $expected) = @$case;
    is(
        my_lookup_function($input),
        $expected,
        "$input => $expected",
    );
}

但是,测试不会运行,因为

my $dir = dist_dir('My-Dist');

嘎嘎叫着。

我的Makefile.PL似乎是正确的,因为我可以在blib下找到共享文件。我只是不知道我需要做什么才能在我的模块中调用File::ShareDir::dist_dir来在测试期间找到这个目录。

我确实看过Test::File::ShareDir,但我不明白它是否可以用来做我想做的事。

如果您能告诉我如何使用当前设置实现所需的行为,或者建议以不同的方式做事(并且可能是正确的; - )

,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

适合我。

perl Makefile.PL ; make
make test
prove -b

$ tree
.
├── Makefile.PL
├── share
│   └── quux
└── t
    └── foo.t

2 directories, 3 files

$ cat Makefile.PL
use ExtUtils::MakeMaker;
use File::ShareDir::Install;

install_share 'share';
WriteMakefile;

package MY;
use File::ShareDir::Install qw(postamble);


$ cat t/foo.t
use File::ShareDir qw(dist_dir);
use Test::More;

diag dist_dir('My-Dist');

pass;
done_testing;

答案 1 :(得分:2)

您可以使用模块Test::File::ShareDir告诉您的测试在哪里查找您的ShareDir文件。

来自文档:

use Test::More;

# use FindBin; optional

use Test::File::ShareDir
    # -root => "$FindBin::Bin/../" # optional,
    -share => {
        -module => { 'My::Module' => 'share/MyModule' }
        -dist   => { 'My-Dist'    => 'share/somefolder' }
    };

use My::Module;

use File::ShareDir qw( module_dir dist_dir );

module_dir( 'My::Module' ) # dir with files from $dist/share/MyModule

dist_dir( 'My-Dist' ) # dir with files from $dist/share/somefolder