0

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

我遇到的具体问题是我有三个模块,HomeBrew::IOHomeBrew::StatsHomeBrew::Bio,我不知道如何按照文件的排列方式分别构建或测试它们。

这三个模块文件位于同一个目录.../HomeBrew/lib/HomeBrew/中,并且我在目录中有三个 Build.PL 文件.../HomeBrew/(命名IO-Build.PL等),三个 .t 文件位于.../HomeBrew/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. 我更愿意将所有 HomeBrew 模块文件保存在.../HomeBrew目录中,但我是否必须将每个文件分开到不同的目录中?

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

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

4

2 回答 2

5

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

至于单独测试,您可以在其自己的测试文件中测试每个子,或以您喜欢的任何其他方式拆分测试。你不必用make testor调用你的测试./Build test——你总是可以明确地运行你关心的测试:perl -Ilib t/<name of test>.

于 2010-09-13T19:24:42.697 回答
1

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

于 2010-09-14T05:12:20.730 回答