2011-03-28 51 views
2

我有一套复杂的集成测试,它使用Perl的WWW :: Mechanize驱动Web应用程序,并根据特定的数据组合检查结果。有超过20个子程序组成测试逻辑,循环数据等。每个测试都在不同的数据集上运行几个测试子程序。我应该如何处理未修复的错误测试

该网页应用程序并不完美,所以有时候错误会导致测试失败,导致非常特定的数据组合。但是这些组合非常罕见,以至于我们的团队很难长期修复这些bug。优先建立许多其他新功能。

那么我应该怎么做失败的测试?这只是几十个数据组合中的几个测试。 1)我不能让它失败,因为那样整个测试套件就会失败。 2)如果我们评论他们,这意味着我们错过了对所有其他数据集进行测试。 3)我可以在失败的特定数据集中添加一个标志,并且如果该标志已设置,则不会运行测试,但是在我的测试子例程中,我将遍历整个地方的额外标志。

什么是最干净和最简单的方法来做到这一点? 还是干净而容易相互排斥?

回答

11

这就是TODO的用途。

对于待办事项块,内部测试预计会失败。 Test :: More将正常运行测试,但会打印出指示它们“待办事项”的特殊标志。 Test :: Harness会将错误解释为正确。如果有什么成功的话,它会报告它是一个意想不到的成功。然后你知道你所做的事情已经完成,并可以删除TODO标志。

关于待办事项测试的好的部分,而不是简单地评论一个测试块,它就像是有一个程序化的待办事项列表。你知道还有多少工作要做,你知道有什么错误,并且当它们修复时你会立即知道。

一旦todo测试开始成功,只需将其移动到该块之外即可。当该块为空时,将其删除。

+0

正是我需要的,谢谢你为我节省了一些时间RTFM! – 2011-03-28 10:57:28

0

我看到两个主要选择

  1. 禁用测试(注释出来),用你的bug跟踪系统的参考(即一个bug IG),可能保持一记中的bug以及有是为这个bug准备的测试

  2. 将失败的测试移到单独的测试套件中。你甚至可以逆转失败的断言,所以你可以运行该套件,而当它是绿色的错误仍然存​​在,如果它变红,错误消失或其他可怕的。当然,链接到bugtracking系统和包仍然是一件好事。

0

如果实际使用Test :: More与WWW :: Mechanize结合使用,则关闭case(请参阅@daxim的注释)。如果没有,想想类似的方法:

# In your testing module 
our $TODO; 
# ... 
if (defined $TODO) { 
    # only print warnings 
}; 

# in a test script 
local $My::Test::TODO = "This bug is delayed until iteration 42"; 
相关问题