【问题标题】:Why do my Perl module tests fail when I run them with Test::Harness::runtests?为什么当我使用 Test::Harness::runtests 运行 Perl 模块测试时会失败?
【发布时间】:2009-12-07 09:45:57
【问题描述】:

我有一个Test::More 用于我们制作的模块的测试脚本。单独运行测试脚本时,它按预期工作。 由于我们需要运行几个测试,我创建了一个运行所有脚本的Test::Harness 文件。但是,当从 Test::Harness runtests 执行时,脚本会返回错误。

在调试过程中,我尝试使用 backtics 运行脚本,并且成功了。所以 runtest 命令导致了错误。

线束的代码非常简单:

(perl) -w
use strict;
use warnings;
use Test::Harness;

my @tests = ('test1.pl', 'test2.pl', 'test3.pl');
runtests(@tests);

错误源自我们使用的 cpan 模块,Pod::HtmlEasy

我希望的解决方案是运行Test::Harness 而不会出现错误。

测试的输出:

正则表达式中的 test1........False [] 范围“\w-”;由第 20 行标记。 在 /app/perl/lib/Pod/HtmlEasy/Parser.pm 第 422 行第 20 行的字符串 ne 中使用未初始化的值。 在 /app/perl/lib/Pod/HtmlEasy/Parser.pm 第 363 行第 22 行的字符串 ne 中使用未初始化的值。 正则表达式中的 False [] 范围“\w-”;由第 22 行标记。 在 /app/perl/lib/Pod/HtmlEasy/Parser.pm 第 488 行第 24 行的字符串 ne 中使用未初始化的值。 在 /app/perl/lib/Pod/HtmlEasy/Parser.pm 第 363 行第 26 行的字符串 ne 中使用未初始化的值。 close() 在 /app/perl/lib/Pod/HtmlEasy.pm 第 248 行的未打开文件句柄 PODIN 上。 在 /app/perl/lib/Pod/HtmlEasy.pm 第 318 行的连接 (.) 或字符串中使用未初始化的值。 (...) 在 /app/perl/lib/Pod/HtmlEasy.pm 第 396 行的连接 (.) 或字符串中使用未初始化的值。 test1........在 /app/perl/lib/Pod/HtmlEasy.pm 第 248 行的未打开文件句柄 PODIN 上确定 2/3close()。 在 /app/perl/lib/Pod/HtmlEasy.pm 第 318 行的连接 (.) 或字符串中使用未初始化的值。 (...) 在 /app/perl/lib/Pod/HtmlEasy.pm 第 396 行的连接 (.) 或字符串中使用未初始化的值。 测试1........好的

【问题讨论】:

  • 您尝试更新 Pod::HtmlEasy 了吗?这些天似乎正则表达式看起来有所不同,并且更改文件说最新版本修复了“克服看似随机的 CPAN 测试失败”。
  • @Manni;谢谢,这似乎是一个前进的方向。我们使用的是原始开发人员的最后一个版本,即 2004 年的 0.07。使用最新版本确实引入了一些我们需要解决的其他问题……比如一些非向后兼容的更改。前进一步,后退一步。 :) 无论如何,谢谢。

标签: perl unit-testing testing


【解决方案1】:

为什么不让 Test::Harness 从命令行即时构建测试环境?

prove test*.pl

或者,如果您按照标准将测试保存在 t/ 目录中:

prove -r t/

【讨论】:

  • 谢谢!证明工作正常。目前,测试基础设施依赖于一个列出所有测试脚本的 test::harness 文件,但我们正在计划重做,所以我会建议这样做。
  • 如果你想列出要运行的测试,听起来你想要我的 Test::Manifest。
【解决方案2】:

您为什么要创建自己的测试脚本?只需将您的模块放入标准分发设置并从构建脚本运行它。此外,您可以只使用prove 来做您已经在做的事情。

【讨论】:

    【解决方案3】:

    您粘贴的输出显示您的测试通过。输出的消息是警告。如果您在运行perl test1.pl 时没有收到警告,那是因为您(或您正在使用的模块)没有启用警告。显然 Test::Harness 使用 -w 标志调用 perl,并且您会收到警告,因为 -w 全局启用警告。 (“使用警告”仅在“使用警告”的词法范围内启用它们。)

    【讨论】:

    • 很好,我错过了那个。将 -w 添加到测试脚本会给出完全相同的日志。所以至少这意味着 test::harness 不会引入一些错误。
    猜你喜欢
    • 1970-01-01
    • 2021-02-16
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多