【问题标题】:How to unit test if "." is not on @INC?如果“。”如何进行单元测试不在@INC 上?
【发布时间】:2014-01-17 03:33:32
【问题描述】:

我使用 Module::Starter 创建了一个模块的骨架,它创建的一个测试文件(“t/00-load.t”)如下所示:

#!perl -T
use 5.006;
use strict;
use warnings FATAL => 'all';

plan tests => 1;

BEGIN {
  use_ok( 'My::Module' ) || print "Bail out!\n";
}

但是当我运行make && make test 时,此测试失败,因为打开污点模式(“perl -T”)会删除“。”来自@INC,因此找不到My::Module。一般来说,我可以看到打开污点检查的价值,但是我应该如何测试这段代码呢?这是输出的错误消息:

#   Failed test 'use My::Module;'
#   at t/00-load.t line 10.
#     Tried to use 'My::Module'.
#     Error:  Can't locate My/Module.pm in @INC (@INC contains:
#     /Library/Perl/5.16/darwin-thread-multi-2level
#     /Library/Perl/5.16
#     /Network/Library/Perl/5.16/darwin-thread-multi-2level
#     /Network/Library/Perl/5.16
#     /Library/Perl/Updates/5.16.2/darwin-thread-multi-2level
#     /Library/Perl/Updates/5.16.2
#     /System/Library/Perl/5.16/darwin-thread-multi-2level
#     /System/Library/Perl/5.16
#     /System/Library/Perl/Extras/5.16/darwin-thread-multi-2level
#     /System/Library/Perl/Extras/5.16) at (eval 4) line 2.
# BEGIN failed--compilation aborted at (eval 4) line 2.

这是在 perl 5.16.1 上,带有 Module::Starter 1.62 和 ExtUtils::MakeMaker 6.86。骨架是使用“module-starter --module=My::Module”创建的,因此其他所有内容都使用默认值。

【问题讨论】:

  • 它不应该在.,它应该在 blib/??
  • @ysth:@INC 中没有“blib”,我编辑了问题以添加错误输出。
  • @ysth:这是prove t 的错误输出。我应该坚持使用./Build test。运行没有错误。
  • @ysth:正确运行测试,谢谢!但是使用./Build test也会重建blib,如果它与源不同步,所以它可能是正确的方法。
  • 是(如果是非构建模块,则为 make test)。但是之后可以很方便地prove --blib -v t

标签: perl


【解决方案1】:

当使用 Module::Starter 创建模块时,它又依赖于 MakeMaker(或 Module::Build),那么所有构建和测试都应通过提供的 Makefile(或 Build 文件,如果使用 Module::建造)。即,make && make test./Build && ./Build test

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多