Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JUnit';s@忽略_Java_Unit Testing_Testing - Fatal编程技术网

Java JUnit';s@忽略

Java JUnit';s@忽略,java,unit-testing,testing,Java,Unit Testing,Testing,我想知道使用JUnit的@Ignore是否是一种好的做法。人们是如何使用它的 我提出了以下用例:假设我正在开发一个类并为其编写一个JUnit测试,但没有通过,因为我还没有完全完成这个类。用@Ignore标记它是一种好的做法吗 我有点担心我们以后可能会错过被忽略的测试用例,或者人们开始使用它来“强制”测试通过CI。我想这很好 他说, 测试运行者将报告忽略的测试数以及测试数 已运行的和失败的测试数 因此,这意味着即使您事后忘记删除,您也应该得到通知 中给出的示例与您的案例完全相似 @Ignore("

我想知道使用JUnit的@Ignore是否是一种好的做法。人们是如何使用它的

我提出了以下用例:假设我正在开发一个类并为其编写一个JUnit测试,但没有通过,因为我还没有完全完成这个类。用@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