我想知道使用JUnit的@Ignore是否是一个好习惯.以及人们如何使用它?
我提出了以下用例:假设我正在开发一个类并为它编写一个JUnit测试,它没有通过,因为我对这个类没有完成.用@Ignore标记它是一个好习惯吗?
我有点担心以后我们可能会错过被忽略的测试用例,或者人们开始使用它来"强制"测试通过CI.
我想,那太好了.
该文件说,
测试运行器将报告被忽略的测试数量,以及运行的测试数量和失败的测试数量.
因此,这意味着即使您以后忘记删除它,也应该已经通知您.
文档中给出的示例完全类似于您的情况.
@Ignore("not ready yet")
我经常使用@Ignore进行因已知错误而失败的测试.一旦错误被确认并记录在错误数据库中,测试失败就没有任何意义,因为错误已经知道.
保留测试代码仍然有意义,因为一旦修复了bug,它将再次有用.因此我将其标记为忽略,并附有指示相关错误的注释,并在错误报告中理想地注意,应该重新激活测试以测试修复.
恕我直言,忽略不应该轻易使用...由于窗户效果破坏.
我很少发现自己在xUnit中使用了这个属性/注释.我用过它们的唯一几次就是在编写TestCase#1时作为TODO,我看到了我错过的另一个测试用例,但也应包括在内.为了让我不忘记它,我写了一个带有描述性名称的小测试用例并用Ignore标记它.继续完成TestCase#1.但这都是内部登记入住.我从不检查标有Ignore的测试.
然而,通常我只是使用一张纸 - 测试列表来记下新的测试用例 - 这要简单得多.这也迎合了我部分完成的情况......完成了10次测试中的5次.我没有在5个忽略的测试中签入,而是保留测试列表并检查5个通过的测试.假设您在接下来的几次签到之前完成其余的工作,然后再跳到新的东西.
其他"特殊情况"我能想到的是..
当你等待一个部件从另一个团队/人/供应商(其接口已经公布,同意),没有这些测试不能运行.在这种情况下,您可以编写测试并使用Ignore标记它("等待X以传递组件Y")
我认为使用它是一种非常好的方式.
您的CI服务器应始终为绿色(或Hudson的蓝色).只要不是你的第一要务就是解决它.
现在,如果CI由于测试代码中的错误而破坏(可能测试代码是顽皮且非确定性的)那么你应该忽略测试"@Ignore(此测试代码是borken,引发缺陷#123)"并提高缺陷跟踪器中的错误.
您不会发送损坏的代码,因为无论何时发货,您都会检查所有缺陷并确定它们中的任何缺陷是否正确?未运行的损坏测试将与其正在测试的代码/功能一起考虑.当且仅当您对其测试的代码没有被破坏感到高兴时,您才会发货.如果未经过测试,请将其视为已损坏.
我希望在运行ant测试时使用的junit xml报告格式化程序有一天会包含忽略的计数(以及原因)以及通过,失败和错误.也许那时,CI供应商将包括被忽略的测试计数(如果不是,我可能要写一个Hudson插件...)