Perl帮助进行回归测试
是否有一个Perl模块,允许我查看程序(或者函数)的实际输出与参考输出之间的差异?如果存在差异,则测试将失败。
另外,如果存在差异,但输出正常(因为功能已更改),我希望能够将实际输出提交为将来的参考输出。
解决方案
回答
我倾向于使用更多的Test :: Simple和Test :: More功能。我查看了PerlUnit,它似乎提供了很多功能,这些功能已经通过Test :: Simple和Test :: More库内置于标准库中。
回答
Perl具有出色的实用程序来进行测试。最常用的模块可能是Test :: More,它提供编写回归测试可能需要的所有基础结构。证明工具为运行测试套件和汇总结果提供了一个简单的界面。 Test :: Differences模块(可以与Test :: More一起使用)也可能对我们有用。它将差异格式化为并排比较。至于将实际输出作为新参考资料,则取决于被测代码如何提供输出以及如何捕获输出。如果先写入文件然后进行比较,那应该很容易。如果是这种情况,我们可能想在测试套件中使用Text :: Diff模块。
回答
为了测试程序的输出,有Test :: Command。它可以轻松验证程序的stdout和stderr(以及退出值)。例如。:
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' )
该模块还具有功能接口,如果我们更喜欢的话。
回答
社区标准的主要工作是Test :: Simple(用于测试入门)和Test :: More(用于一次,我们想要的不仅仅是Test :: Simple可以为我们完成的工作)。两者都是基于预期输出与实际输出的概念构建的,并且两者都会在发生时向我们显示差异。这些模块的perldoc将助我们一臂之力。
我们可能还需要查看Perl QA Wiki,并且如果我们真的对perl测试感兴趣,那么perl-qa邮件列表可能值得研究-尽管与使用这些系统相比,通常更多的是为Perl创建测试系统在语言范围内。
最后,使用module-starter工具(来自Module :: Starter)将为我们提供一个非常不错的" CPAN标准"布局,以进行新工作-或者将现有代码放入其中-包括现成的测试工具设置。
回答
如前所述,Test :: Differences是完成此操作的标准方法之一,但我需要提及PerlUnit:请不要使用它。它是"放弃软件",并且未与标准Perl测试工具集成。因此,对于所有新推出的测试模块,如果要使用它们,就必须移植它们的功能。 (如果有人接受了这个废弃模块的维护,请给我下一行。在维护核心测试工具(我想帮助与PerlUnit集成)时,我需要与他们联系。
免责声明:虽然Id没有编写,但我目前维护Test :: Differences,因此我可能会有所偏见。
回答
我质疑那些建议使用PerlUnit的人。它已经三年没有发布了。如果我们真的想要xUnit风格的测试,请看一下Test :: Class,它可以完成相同的工作,但是使用的是Perlish方式。它仍然可以维护并且可以定期发布,这一事实也不会对它们造成损害。
只要确保它对项目有意义。也许是不错的旧Test ::更多我们需要的(通常是对我来说)。我建议阅读文档中的"为什么不应该使用Test :: Class"部分。