如果我使用,我是一个坏人use Test::More qw(no_plan)
吗?
测试::更多POD说
在此之前,您需要一个测试计划.这基本上声明了您的脚本将运行多少测试以防止过早失败...
use Test::More tests => 23;
在极少数情况下,您事先不知道脚本将运行多少测试.在这种情况下,您可以声明您没有计划.(尽量避免使用它,因为它会削弱您的测试.)
use Test::More qw(no_plan);
但是,如果在测试结束时没有打印结果,则可以很容易地看到过早失效.它似乎没有帮助.
所以我有3个问题:
默认情况下要求测试计划背后的原因是什么?
从长远来看,有没有人发现这是一个有用且省时的功能?
其他语言的其他测试套件是否支持此类事情?
Eric Johnson.. 32
YSTH的答案链接到一个伟大的讨论这个问题,其中包括由迈克尔Schwern拥有奥维德和谁是意见Test::More
和Test::Most
分别维护者.显然,这会偶尔出现在perl-qa列表中,这是一个有争议的问题.以下是亮点:
它烦人,需要时间.
它不值得花时间,因为测试脚本不会在没有测试线束注意的情况下死亡,除非在极少数情况下.
Test::More
可以在测试发生时计算
如果您使用测试计划并且需要跳过测试,那么您还需要一个SKIP{}
块.
它只需要几秒钟.如果需要更长时间,则测试逻辑过于复杂.
如果代码中的某个地方有一个退出(0),那么您的测试将成功完成,而不会运行剩余的测试用例.细心观察的人可能会注意到屏幕输出看起来不正确,但在自动测试套件中它可能会被忽视.
开发人员可能会意外地编写测试逻辑,以便某些测试永远不会运行.
如果不提前知道将运行多少测试,您就无法拥有进度条.仅通过内省很难做到这一点.
Test::Simple
,Test::More
并且Test::Most
有一个done_testing()
应该在测试脚本结束时调用的方法.这是我目前采用的方法.
这解决了代码中包含问题的问题exit(0)
.它并没有解决无意中跳过测试的逻辑问题.
简而言之,使用计划更安全,但除非您的测试套件复杂(并且它们不应该复杂),否则实际节省一天的机会很低.
所以使用done_testing()
是一个中间立场.无论你喜欢什么,这可能都不是什么大问题.
有些人提到这个功能在真实的单词中对他们有用.这包括拉里沃尔.迈克尔施韦恩说,这个特征起源于20多年前的拉里.
xUnit类型测试套件都没有测试计划功能.我没有遇到任何其他编程语言中使用此功能的示例.
YSTH的答案链接到一个伟大的讨论这个问题,其中包括由迈克尔Schwern拥有奥维德和谁是意见Test::More
和Test::Most
分别维护者.显然,这会偶尔出现在perl-qa列表中,这是一个有争议的问题.以下是亮点:
它烦人,需要时间.
它不值得花时间,因为测试脚本不会在没有测试线束注意的情况下死亡,除非在极少数情况下.
Test::More
可以在测试发生时计算
如果您使用测试计划并且需要跳过测试,那么您还需要一个SKIP{}
块.
它只需要几秒钟.如果需要更长时间,则测试逻辑过于复杂.
如果代码中的某个地方有一个退出(0),那么您的测试将成功完成,而不会运行剩余的测试用例.细心观察的人可能会注意到屏幕输出看起来不正确,但在自动测试套件中它可能会被忽视.
开发人员可能会意外地编写测试逻辑,以便某些测试永远不会运行.
如果不提前知道将运行多少测试,您就无法拥有进度条.仅通过内省很难做到这一点.
Test::Simple
,Test::More
并且Test::Most
有一个done_testing()
应该在测试脚本结束时调用的方法.这是我目前采用的方法.
这解决了代码中包含问题的问题exit(0)
.它并没有解决无意中跳过测试的逻辑问题.
简而言之,使用计划更安全,但除非您的测试套件复杂(并且它们不应该复杂),否则实际节省一天的机会很低.
所以使用done_testing()
是一个中间立场.无论你喜欢什么,这可能都不是什么大问题.
有些人提到这个功能在真实的单词中对他们有用.这包括拉里沃尔.迈克尔施韦恩说,这个特征起源于20多年前的拉里.
xUnit类型测试套件都没有测试计划功能.我没有遇到任何其他编程语言中使用此功能的示例.
我不确定你真正在问什么,因为文档摘录似乎回答了它.我想知道我的所有测试是否都运行了.但是,在测试套件稳定之前,我认为没有用.
在开发时,我使用no_plan因为我不断添加到测试套件中.随着事情的稳定,我会验证应该运行的测试数量并更新计划.有些人已经提到了"测试工具",但没有"测试工具"这样的东西.默认情况下,大多数模块都使用这个模块,因为这是MakeMaker或Module :: Build指定的,但TAP输出独立于任何特定的TAP使用者.
有几个人提到了测试次数可能不同的情况.我找出了测试但是我需要计算数字,然后在计划中使用它.它还有助于拥有针对特定功能的小型测试文件,因此测试数量很少.
use vars qw( $tests ); BEGIN { $tests = ...; # figure it out use Test::More tests => $tests; }
您还可以将计数与加载分开:
use Test::More; plan tests => $tests;
最新的TAP也可以让您将计划放在最后.
在一条评论中,您似乎认为过早退出将被视为失败,因为该计划最终不会输出,但事实并非如此 - 除非您以POSIX :: _退出或致命的信号等.特别是,die()和exit()将导致计划被输出(尽管测试工具应该检测除了退出(0)以外的任何东西作为过早终止的测试).
您可能希望查看Test :: Most的延迟计划选项,很快就会出现在Test :: More中(如果还没有).
最近在perl-qa列表上也讨论了这个问题.一个主题:http://www.nntp.perl.org/group/perl.qa/2009/03/msg12121.html
进行任何测试都比不进行测试更好,但测试是关于故意的.说明预期的数量测试使您能够查看测试脚本中是否存在阻止测试执行(或执行太多次)的错误.如果在特定条件下不运行测试,可以使用skip函数声明:
SKIP: { skip $why, $how_many if $condition; ...normal testing code goes here... }