是否有使用Module :: Build编写测试(和构建)的文档?

时间:2010-09-13 18:29:48

标签: perl module testing perl-module

所以我已经为我自己使用了一些模块,我想知道是否有任何关于如何使用Module :: Build为perl模块编写测试的文档。

我遇到的具体问题是我有三个模块,HomeBrew::IOHomeBrew::StatsHomeBrew::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并且一次只检查一个。

所以,

  1. 如何确保create_build_script()不包含lib/HomeBrew中的每个.pm文件。我更喜欢将所有HomeBrew模块文件保存在.../HomeBrew目录中,但是我是否必须将每个文件分成不同的目录?

  2. 如何为每个子程序进行测试,以便Module :: Build知道如何测试整个模块或只测试其中的一部分?

  3. 现在,当我说./Build test时,它会同时测试所有三个模块(并且./Build install一次安装所有三个模块。)

2 个答案:

答案 0 :(得分:5)

在我看来,问题在于你的前提,你需要单独构建和测试它们。如果你想这样做,它们应该是在他们自己的目录中使用他们自己的Build.PL文件的单独安装。但是,如果它们应该一起分发,它们应该一起构建和测试。

至于单独测试内容,您可以在自己的测试文件中测试每个子项,或者以您喜欢的任何其他方式拆分测试。您无需使用make test./Build test调用测试 - 您始终只需明确运行您关注的测试:perl -Ilib t/<name of test>

答案 1 :(得分:1)

您在对Ether的评论中说,您并不总是希望运行每个测试。在这种情况下,您可能希望使用App::Prove来运行您想要查看的测试。它还有许多其他功能来管理您跟踪和查看的信息。