我在解决方案文件中有许多项目,这些项目都为它们编写了单元测试,我希望将它们设置为由我们的持续集成服务器运行.但是,由于许多测试写得不好而且没有经常运行,因此有许多测试失败了.
我目前没有时间修复所有测试,但我相信现有测试运行是有价值的.处理失败的单元测试的最佳方法是什么?
我目前正在做的是将每个失败的测试标记为Explicit并留下TODO评论.
[Test, Explicit] //TODO: Rewrite this test because it fails
有没有更好的方法呢?或者我应该在将它们包含在CIS运行的测试之前修复所有测试吗?
由于你有一个正在运行的自动构建(带有测试失败通知!),这听起来像是每天5天的时间(从ubuntu社区免费):
在每个失败的测试方法中插入以下(伪代码):
if ( DateTime.now < new DateTime(2008, 12, 24, 11, 00, 00)) return;
您每5次插入此声明,您需要提前一个工作日.在您可能有时间修复测试的某个时间设置时间.
当工作日到来时,您可以修复或删除它.
好吧,在NUnit中,您可以选择使用ignore属性忽略测试:
[Test, Ignore("Test needs rewrite")]
就个人而言,我对这些测试做了两件事:
如果我不理解测试,或者测试是否过时/与当前规格不同步,请删除它们
如果修复很简单,请将其重构为正确的规范
从你所写的内容中收集我会怀疑许多失败的测试已经过时,并且可能首先不相关,所以我认为删除它们会很好.
无论如何,保持无人理解的测试毫无意义.
更新:Oren Eini有一篇博文,其中概述了我对激活旧的失败测试的大部分看法:
测试本身没有任何价值:我最成功的项目没有任何测试
报价:
测试是一种工具,在将其应用于项目之前,应根据通常的指标评估其使用情况.有许多理由不使用测试,但大多数原因归结为:"它们会给过程带来摩擦".
如果改造旧的,失败的测试会给过程带来摩擦,可能根本不值得更新它们.