Eri*_*son 23 testing perl unit-testing
如果我使用,我是一个坏人use Test::More qw(no_plan)吗?
测试::更多POD说
在此之前,您需要一个测试计划.这基本上声明了您的脚本将运行多少测试以防止过早失败...
use Test::More tests => 23;在极少数情况下,您事先不知道脚本将运行多少测试.在这种情况下,您可以声明您没有计划.(尽量避免使用它,因为它会削弱您的测试.)
use Test::More qw(no_plan);
但是,如果在测试结束时没有打印结果,则可以很容易地看到过早失效.它似乎没有帮助.
所以我有3个问题:
Eri*_*son 32
YSTH的答案链接到一个伟大的讨论这个问题,其中包括由迈克尔Schwern拥有奥维德和谁是意见Test::More和Test::Most分别维护者.显然,这会偶尔出现在perl-qa列表中,这是一个有争议的问题.以下是亮点:
Test::More 可以在测试发生时计算SKIP{}块.Test::Simple,Test::More并且Test::Most有一个done_testing()应该在测试脚本结束时调用的方法.这是我目前采用的方法.
这解决了代码中包含问题的问题exit(0).它并没有解决无意中跳过测试的逻辑问题.
简而言之,使用计划更安全,但除非您的测试套件复杂(并且它们不应该复杂),否则实际节省一天的机会很低.
所以使用done_testing()是一个中间立场.无论你喜欢什么,这可能都不是什么大问题.
有些人提到这个功能在真实的单词中对他们有用.这包括拉里沃尔.迈克尔施韦恩说,这个特征起源于20多年前的拉里.
xUnit类型测试套件都没有测试计划功能.我没有遇到任何其他编程语言中使用此功能的示例.
bri*_*foy 10
我不确定你真正在问什么,因为文档摘录似乎回答了它.我想知道我的所有测试是否都运行了.但是,在测试套件稳定之前,我认为没有用.
在开发时,我使用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...
}
Run Code Online (Sandbox Code Playgroud)