Java JUnit';s@忽略
我想知道使用JUnit的@Ignore是否是一种好的做法。人们是如何使用它的 我提出了以下用例:假设我正在开发一个类并为其编写一个JUnit测试,但没有通过,因为我还没有完全完成这个类。用@Ignore标记它是一种好的做法吗Java JUnit';s@忽略,java,unit-testing,testing,Java,Unit Testing,Testing,我想知道使用JUnit的@Ignore是否是一种好的做法。人们是如何使用它的 我提出了以下用例:假设我正在开发一个类并为其编写一个JUnit测试,但没有通过,因为我还没有完全完成这个类。用@Ignore标记它是一种好的做法吗 我有点担心我们以后可能会错过被忽略的测试用例,或者人们开始使用它来“强制”测试通过CI。我想这很好 他说, 测试运行者将报告忽略的测试数以及测试数 已运行的和失败的测试数 因此,这意味着即使您事后忘记删除,您也应该得到通知 中给出的示例与您的案例完全相似 @Ignore("
我有点担心我们以后可能会错过被忽略的测试用例,或者人们开始使用它来“强制”测试通过CI。我想这很好 他说, 测试运行者将报告忽略的测试数以及测试数 已运行的和失败的测试数 因此,这意味着即使您事后忘记删除,您也应该得到通知 中给出的示例与您的案例完全相似
@Ignore("not ready yet")
好吧,如果你还没学完这门课,测试失败就好了。将其标记为@Ignore意味着您将发布一个带有未完成类的代码。是的,也许您还没有在任何执行的代码中使用该类,但有一天其他开发人员可能会看到该类并使用它。然后他失败了,即使它应该工作
在这种情况下,我肯定不会使用@Ignore 我认为只要有-
至少在我看来,这是规则;-) IMHO,忽略不应轻率使用的内容。。。由于破窗效应 我很少在xUnit中使用这个属性/注释。我使用它们的次数只有几次,那就是在编写测试用例#1时,我看到了另一个我遗漏但也应该包括在内的测试用例。为了不忘记它,我写了一个带有描述性名称的小测试用例,并用Ignore标记它。继续完成测试用例#1。但这都是内部登记。我从不签入标有Ignore的测试 然而,通常我只是使用一张纸-测试列表来记录新的测试用例-这要简单得多。这也迎合了我部分完成的场景。。。完成了10项测试中的5项。我不会签入5个被忽略的测试,而是保留测试列表并签入5个通过的测试。假设您将在接下来的几次签入中完成其余部分,然后再跳到新的内容 我能想到的其他“特殊情况”是..
当您等待来自另一个团队/个人/供应商(其接口已发布并获得同意)的组件时,如果没有该组件,测试将无法运行。在这种情况下,您可以编写测试并用Ignore(“等待X交付组件Y”)标记它。我认为这是一种非常好的使用方法 您的CI服务器应始终为绿色(在Hudson的情况下为蓝色)。不管什么时候,你的首要任务是修复它 现在,如果CI因测试代码中的错误而中断(可能测试代码是顽皮和不确定的),那么您应该忽略测试“@ignore(此测试代码是borken,引发的缺陷#123)”并在缺陷跟踪器中引发错误
您不会发布坏代码,因为无论何时发布,您都会检查所有缺陷,并确定其中是否有缺陷,对吗?未运行的中断测试将与其测试的代码/功能一起考虑。如果并且仅当您对测试的代码没有被破坏感到高兴时,您才会发布。如果没有测试,请考虑它被破坏了。
我希望在从ant运行测试时使用的JUnitXML报告格式化程序有一天会包括忽略的计数(以及原因)以及通过、失败和错误。然后,CI供应商可能会包括被忽略的测试计数(如果没有,我可能不得不编写Hudson插件…对于因已知错误而失败的测试,我通常使用@Ignore。一旦bug被确认并记录在bug数据库中,测试失败就没有任何意义了,因为bug已经被知道了
尽管如此,保留测试代码还是有意义的,因为一旦bug被修复,它将再次有用。因此,我将其标记为被忽略,并用一条注释指示相关的bug,最好在bug报告中指出,应该重新激活测试以测试修复。我认为这违背了测试驱动开发的核心基础。当然,如果你没有做TDD,那么它可能没那么重要 我想说的是,如果你使用@ignore,那么你就没有精益,也没有做TDD 如果你在做TDD,那么你对回购协议的任何承诺都不应该有失败的测试
我完全疯了吗?或者这有意义吗?我认为当测试依赖于无法模拟的外部实体时,使用@Ignore是可以的。我们仍然需要测试来确保一切正常,但我们不想部署依赖于外部依赖的测试 例如,如果您为Google文档编写自定义电子表格编写器/阅读器,那么使用真实的Google文档对其进行测试是有意义的。然而,如果谷歌文档因任何原因关闭,你也不会希望你的构建失败。在确认您的单元测试在本地通过之后,我会在将它推到生产环境之前添加一个@Ignore
一般来说,我认为应该尽量避免@Ignore,因为在大多数情况下,外部类/系统可以被模拟。
@Ignore
可以用于为某些第三方服务编写的测试。我最近发现自己需要检查外部服务是否正在发回我期望的数据。在测试(mock)中这样做非常方便。因为我知道我的输入数据不会永远工作,我可能需要运行simi