很多时候人们写测试时,他们会在状态混乱后自行清理。通常这并不重要,因为对于大多数测试来说对象倾向于被拆除和重新创建,但是有一些不幸的情况是对象的全局状态会持续整个测试运行,并且当您运行测试时依赖于并修改那个全球国家,按照一定的顺序,它们失败了。有没有一种很好的方法来调试RSpec(RSpec2)中依赖于顺序的测试失败?
这些测试和可能的实现显然需要修复,但试图找出在相互影响的测试可能不是完整测试套件中唯一的东西时导致失败的原因是一件很痛苦的事情。当最初并不清楚故障是否与订单相关时尤为困难,并且可能间歇性地或在一台机器上而不是在另一台机器上故障。例如:
rspec test1_spec.rb test2_spec.rb # failures in test2
rspec test2_spec.rb test1_spec.rb # no failures
在RSpec的1有some options (--reverse, --loadby)订购的测试运行,但那些已经在RSpec 2消失,只是在调试反正这些问题的最低限度的帮助。
我不确定RSpec 1或RSpec 2默认使用的顺序,但是我过去使用的一个自定义设计的测试套件在每次运行时随机地对测试进行排序,以便更快地发现这些故障。在测试输出中,用于确定排序的种子与结果一起打印,因此即使您必须做一些工作来缩小套件中引起它们的各个测试的范围,也很容易重现故障。然后有一些选项允许您在任何给定的测试文件中按顺序启动和停止,这使您可以轻松地进行二分查找以找到问题测试。
我还没有在RSpec中找到任何这样的实用程序,所以我在这里问:人们发现调试这些类型的顺序依赖测试失败有什么好方法?
这是非常修辞。你能尝试简化这个问题吗? – 2011-05-10 06:32:38
这就是标题/标题的用途。最后一句话。其余的是澄清我的意思是“顺序依赖测试失败”,因为我没有找到其他问题处理,然后试图描述我在寻找什么样的解决方案。如果这两者对于阅读这个问题的其他人都是显而易见的,那么我同意其他的verbage过于夸张,但我不确定这是否明显。 – mmrobins 2011-05-10 06:44:25