6

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

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

4

6 回答 6

12

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

于 2008-09-15T20:26:45.727 回答
6

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

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

于 2008-09-16T06:27:21.010 回答
4

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

于 2008-09-15T20:16:46.127 回答
3

我质疑那些推荐使用 PerlUnit 的人。它已经3年没有发布了。如果你真的想要 xUnit 风格的测试,请看一下Test::Class,它做同样的工作,但以更 Perlish 的方式。它仍然被维护并定期发布的事实也没有受到伤害。

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

于 2008-09-16T11:03:38.867 回答
2

For testing the output of a program, there is Test::Command. It allows to easily verify the stdout and stderr (and the exit value) of programs. 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' )

The module also has a functional interface too, if it's more to your liking.

于 2008-09-16T01:59:29.640 回答
2

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

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

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

于 2008-09-16T05:56:09.573 回答