【问题标题】:How to specify test prerequisites in the ExtUtils::MakeMaker Makefile.PL如何在 ExtUtils::MakeMaker Makefile.PL 中指定测试先决条件
【发布时间】:2012-08-23 17:37:44
【问题描述】:

PREREQ_PM指定了运行时的先决条件,但是如何指定运行测试用例需要哪些模块呢?

我应该为此使用BUILD_REQUIRES 吗?

【问题讨论】:

    标签: perl perl-module makemaker


    【解决方案1】:

    ExtUtils::MakeMaker 6.64 开始,有一个TEST_REQUIRES 参数。

    use ExtUtils::MakeMaker 6.64;
    
    WriteMakefile(
        ...,
        TEST_REQUIRES => {
            Test::More => 0.95,
            },
        ...,
        );
    

    【讨论】:

      【解决方案2】:

      CPAN::Meta::Spec 定义了模块如何将其先决条件传达给工具链。版本 2 规范修订 the way prerequisites are listedtest 阶段现在有自己的先决条件列表。

      但 MakeMaker 尚未针对 v2 规范进行更新,而且很可能永远不会更新。我所知道的唯一完全兼容的 v2 分发工具是 Dist::Zilla(我推荐它的原因不止于此)。

      CPAN::Meta::Converter 从 v2 规范转换为 v1.4 时,它会将 test 要求合并到 build_requires

      所以是的,如果你坚持使用 MakeMaker,运行测试所需的任何模块都应该列在 BUILD_REQUIRES 中。 PREREQ_PM 应该只包含在安装模块之后仍然需要的模块。

      【讨论】:

      • 很好的解释。 (最后是我一直这样做的一个很好的理由。;)
      • @smonff,这个答案已经过时了。 MakeMaker 实际上在我编写它几个月后就得到了TEST_REQUIRES 的支持。有机会我会更新的。
      • @cjm 感谢您提及它:D!
      【解决方案3】:

      如果在没有模块的情况下测试失败,那么我将其列在PREREQ_PM 中,无论是测试还是运行模块都需要它。

      如果我需要用于某些测试的模块,但不需要它们来运行模块,我会在测试运行时检测到这些模块,如果找不到它们,我会跳过测试(通过 PASS)。

      我认为 ExtUtils::MakeMaker 中没有你想要的任何字段。

      【讨论】:

        猜你喜欢
        • 2017-12-19
        • 2011-08-18
        • 2010-10-12
        • 2014-03-10
        • 1970-01-01
        • 1970-01-01
        • 2015-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多