Perl帮助进行回归测试

时间:2008-09-15 19:59:31

标签: perl testing regression

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

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

6 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:6)

如上所述,Test :: Differences是实现此目标的标准方法之一,但我需要提及PerlUnit:请不要使用它。它是“放弃软件”,并没有与标准的Perl测试工具集成。因此,对于所有出现的新测试模块,如果要使用它们,则必须移植它们的功能。 (如果有人已经开始维护这个废弃的模块,请给我说一句。我需要与他们交谈,因为我维护了核心测试工具,我希望能够帮助与PerlUnit集成。)

免责声明:虽然我没有写它,但我目前维持测试::差异,所以我可能有偏见。

答案 2 :(得分:4)

我倾向于使用更多的Test :: Simple和Test :: More功能。我查看了PerlUnit,它似乎提供了许多已经使用Test :: Simple和Test :: More库构建到标准库中的功能。

答案 3 :(得分:3)

我怀疑那些推荐使用PerlUnit的人。它还没有在3年内发布。如果你真的想要xUnit风格的测试,看看Test::Class,它可以做同样的工作,但是以更加Perlish的方式。它仍然保持并且定期发布的事实也没有伤害。

确保它对您的项目有意义。也许你需要的是好的Test::More(通常适合我)。我建议阅读文档中的“为什么你应该[不]使用Test :: Class ”部分。

答案 4 :(得分:2)

为了测试程序的输出,有Test::Command。它允许轻松验证程序的stdout和stderr(以及退出值)。 E.g:

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' )

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

答案 5 :(得分:2)

社区标准的主力是Test :: Simple(开始测试)和Test :: More(一次你想要的不仅仅是Test :: Simple可以为你做的)。两者都是围绕预期输出和实际输出的概念构建的,并且两者都会在出现时显示出差异。这些模块的perldoc将帮助您顺利进行。

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

最后,使用模块启动工具(来自Module :: Starter)将为新工作提供一个非常好的“CPAN标准”布局 - 或者用于删除现有代码 - 包括现成的测试工具设置。 / p>