【问题标题】:Perl aids for regression testingPerl 辅助回归测试
【发布时间】:2010-09-09 03:24:51
【问题描述】:

是否有一个 Perl 模块允许我查看程序(或函数)的实际输出和参考输出之间的差异?如果存在差异,则测试失败。

此外,如果存在差异但输出正常(因为功能已更改),我希望能够将实际输出提交为将来的参考输出。

【问题讨论】:

  • Test::FileReferenced 已经发布,它与我想要的很接近。

标签: perl testing regression


【解决方案1】:

Perl 具有出色的测试工具。最常用的模块可能是 Test::More,它提供了编写回归测试可能需要的所有基础设施。证明实用程序为运行测试套件和总结结果提供了一个简单的界面。 Test::Differences 模块(可与 Test::More 一起使用)也可能对您有用。它将差异格式化为并排比较。至于将实际输出提交为新的参考资料,这将取决于您的被测代码如何提供输出以及您如何捕获它。如果您写入文件然后比较它们应该很容易。如果是这种情况,您可能希望在测试套件中使用 Text::Diff 模块。

【讨论】:

    【解决方案2】:

    如前所述,Test::Differences 是完成此任务的标准方法之一,但我需要提及 PerlUnit:请不要使用它。它是“废弃软件”,不与标准 Perl 测试工具集成。因此,对于所有出现的新测试模块,如果您想使用它们,就必须移植它们的功能。 (如果有人负责这个废弃模块的维护,请给我留言。我需要与他们交谈,因为我维护核心测试工具,我想帮助与 PerlUnit 集成)。

    免责声明:虽然不是 Id 写的,但我目前维护 Test::Differences,所以我可能有偏见。

    【讨论】:

      【解决方案3】:

      我倾向于使用更多的 Test::Simple 和 Test::More 功能。我查看了 PerlUnit,它似乎提供了很多已经内置在标准库中的功能,包括 Test::Simple 和 Test::More 库。

      【讨论】:

      • 我也使用 Test::More。在做事的 OO 方面,我认为 Test::Class 的使用比 Perlunit 更多。
      【解决方案4】:

      我质疑那些推荐使用 PerlUnit 的人。它已经3年没有发布了。如果您真的想要 xUnit 风格的测试,请查看 Test::Class,它可以完成相同的工作,但以更加 Perlish 的方式。它仍然得到维护并定期发布这一事实也没有什么坏处。

      只要确保它对您的项目有意义。也许你所需要的只是老旧的Test::More(它通常是给我的)。我建议阅读文档中的“Why you should [not] use Test::Class”部分。

      【讨论】:

        【解决方案5】:

        社区标准的主力是 Test::Simple(用于开始测试)和 Test::More(一旦您想要的不仅仅是 Test::Simple 可以为您做的)。两者都是围绕预期输出与实际输出的概念构建的,并且两者都会在它们发生时向您显示差异。这些模块的 perldoc 将助您一臂之力。

        您可能还想查看Perl QA wiki,如果您真的对 perl 测试感兴趣,perl-qa 邮件列表可能值得研究——尽管它通常更多是关于为 Perl 创建测试系统而不是在语言中使用这些系统。

        最后,使用 module-starter 工具(来自 Module::Starter)将为您提供一个非常好的“CPAN 标准”布局,用于新工作或将现有代码放入其中,包括现成的测试工具设置。

        【讨论】:

          【解决方案6】:

          为了测试程序的输出,有Test::Command。它允许轻松验证程序的标准输出和标准错误(以及退出值)。例如:

          use Test::Command tests => 3;
          
          my $echo_test = Test::Command->new( cmd => 'echo out' );
          
          $echo_test->exit_is_num(0, 'exit normally');
          $echo_test->stdout_is_eq("out\n", 'echoes out');
          $echo_test->stderr_unlike( qr/something went (wrong|bad)/, 'nothing went bad' )
          

          该模块也有一个功能接口,如果它更符合您的喜好。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-12-24
            • 2017-01-17
            • 2014-05-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-03-06
            相关资源
            最近更新 更多