所以我已经为我自己使用了一些模块,我想知道是否有任何关于如何使用Module :: Build为perl模块编写测试的文档。
我遇到的具体问题是我有三个模块,HomeBrew::IO
,HomeBrew::Stats
和HomeBrew::Bio
,我无法弄清楚如何构建或单独测试文件的排列方式。
三个模块文件位于同一目录.../HomeBrew/lib/HomeBrew/
中,我有三个Build.PL文件位于.../HomeBrew/
目录(名为IO-Build.PL
等),并且.../HomeBrew/t/
中的三个.t文件(名为HomeBrew-IO.t
等)。
似乎发生的是,三个Build.PL文件似乎并不知道它们一次只能构建一个模块。我会告诉你其中一个:
#!/usr/bin/perl
use warnings;
use strict;
use Module::Build;
my $build = Module::Build->new
(
module_name => "HomeBrew::IO",
dist_author => "George Locke",
dist_abstract => "Various utilities for reading files",
build_requires => {
'Test::More' => '0.10',
'POSIX' => '0', # for tmpname()
'Test::Exception' => '0', # to test that checkExist dies
},
);
$build->create_build_script();
(我应该使用File :: Temp而不是POSIX,但这仅用于测试,所以它不是高优先级)
将来,我想更改我的测试脚本,为每个子程序设置一个,这样我就可以说Build test checkExist
并且一次只检查一个。
所以,
如何确保create_build_script()不包含lib/HomeBrew
中的每个.pm文件。我更喜欢将所有HomeBrew模块文件保存在.../HomeBrew
目录中,但是我是否必须将每个文件分成不同的目录?
如何为每个子程序进行测试,以便Module :: Build知道如何测试整个模块或只测试其中的一部分?
现在,当我说./Build test
时,它会同时测试所有三个模块(并且./Build install
一次安装所有三个模块。)
答案 0 :(得分:5)
在我看来,问题在于你的前提,你需要单独构建和测试它们。如果你想这样做,它们应该是在他们自己的目录中使用他们自己的Build.PL文件的单独安装。但是,如果它们应该一起分发,它们应该一起构建和测试。
至于单独测试内容,您可以在自己的测试文件中测试每个子项,或者以您喜欢的任何其他方式拆分测试。您无需使用make test
或./Build test
调用测试 - 您始终只需明确运行您关注的测试:perl -Ilib t/<name of test>
。
答案 1 :(得分:1)
您在对Ether的评论中说,您并不总是希望运行每个测试。在这种情况下,您可能希望使用App::Prove来运行您想要查看的测试。它还有许多其他功能来管理您跟踪和查看的信息。