【问题标题】:JUnit @Ignore usefulness?JUnit @Ignore 有用吗?
【发布时间】:2011-07-15 12:49:09
【问题描述】:

在 JUnit 中,您可以使用 @Ignore before 方法告诉测试运行器自动跳过这些测试。据我所知,这实际上只是一种方便的方式来记录/标记您想要稍后返回的不完整/不再功能测试。

那么我是否正确地说,在运行时@Ignore 测试、没有注释的方法和注释掉的方法之间没有区别? (假设这些测试都是自包含的。)有没有办法在 Netbeans 上的 JUnit 中获取被忽略的测试用例列表?如果不是,@Ignore 标签到底有多大用处,因为如果测试失败可能更有用,所以它不会被忽视?

【问题讨论】:

    标签: java unit-testing junit netbeans


    【解决方案1】:

    我是否正确地说,在运行时 @Ignore 测试、没有注释的方法和注释掉的方法之间没有区别?

    可以通过反射找到@Ignored 方法。没有注释的方法不能(或者,准确地说,它不能确定为被忽略的测试方法识别),并且注释掉的方法甚至不会进入字节码。

    虽然我认为查找@Ignored 方法运行时没有太多实际价值,但生成统计数据/报告可能很有用。

    @Ignore 标签到底有多大用处

    我能想到的一件事是可搜索性。您可以轻松识别源代码中的所有 @Ignore 注释,而未注释或注释掉的测试并不那么容易找到。

    不通过测试可能更有用,以免被忽视?

    如果您想(并且可以)立即修复它,让它失败也没关系。在某些情况下,你不能,但你仍然想在身边,正是为了不被遗忘。那么@Ignore 就有意义了。

    【讨论】:

      【解决方案2】:
      • 没有注释的方法很可能是实用方法,很可能被测试中的其他方法使用。

      • 注释掉的方法是完全隐藏的方法。

      • 但您可以使用@Ignore 表示您暂时禁用测试。如果您有一段大而复杂的代码正在转换,您可能希望在该代码失败时暂时禁用一些测试,特别是如果运行该代码的机制作为一些更大的回归套件的一部分运行。 @Ignore 属性会提醒您(或您的 QA 团队)还有更多工作要做。

        请记住,@Ignore'd 测试仍然是实时代码,可以通过反射查看甚至执行,而注释掉的代码则不能。这也意味着当你重构其他代码时,它们也会被更新,并且 API 中的语法错误将显示在那里。因此,即使是设置了 @Ignore 的测试也可以积极提高代码质量。

      • JUnit 4 TestRunners 会将@Ignore'd 的测试显示为“已跳过”,因此您可以查看到底有多少测试通过/失败/跳过。

      虽然您的 Netbeans 副本可能无法充分利用 @Ignore,但我可以向您保证,它不是 JUnit 测试的唯一使用者。

      【讨论】:

      • true,这些是禁用测试的不同方法的含义。但在运行时它们都变得等价,对吧? (假设它不是实用方法)
      • 除了两件事:1. @Ignore'd 测试通过反射可见,因此那里传达了一些额外的信息。 2. 如果您注释掉一个测试,您将永远不会知道您破坏了您的 API,从而导致了潜在的语法错误。将代码保留在那里并且@Ignore'd 意味着至少在代码更改期间语法仍然正确。
      • @Ignore 测试也(或应该)被 JUnit4 TestRunners 报告为“跳过”测试——这在报告中仍然是有用的信息。
      • @lavinio :您可能希望将您的“除了两件事”评论整合到您的答案文本中......这会改善答案。
      【解决方案3】:

      @Ignored 测试比注释掉的测试更易于维护(和维护)。随着事物的发展、通过 IDE 进行结构化搜索以及 IDE 辅助重构,它们会受到编译器错误的影响。

      【讨论】:

        【解决方案4】:

        仅供参考,TestNG 对此的支持略有不同:

        • 您可以描述为什么忽略测试:

          @Test(enabled = false, description = "Disabled until BUG-1234 gets fixed")
          
          • Eclipse TestNG 插件和 HTML 报告将 为您提供所有已禁用测试的列表,以及 原因:

        【讨论】:

        • junit 4.11 支持@Ignore("Description")。我不知道什么时候引入的。
        【解决方案5】:

        使用 @Ignore 而不是注释掉 @Test 的优点是 Hudson/Jenkins 将其识别为被忽略的测试并相应地显示在测试结果中。所以你会被提醒那个被忽略的测试,这是一个很大的好处!

        【讨论】:

        • 另一方面(我怀疑这可能会提示该帖子),使用 IDE 的人会立即(通过颜色)发现测试已被注释掉,但可能很容易错过它是 @忽略。
        • 如果您滚动浏览课程,那是真的。但是,如果您运行测试类,Eclipse 会在结果中通过划掉的图标向您显示跳过的测试;-)
        【解决方案6】:

        恕我直言,@Ignore 的用处是在报告中知道有 x 个跳过的测试,如果测试没有被注释为测试或被评论,你就不会得到。 测试失败不是一个好的选择,因为我们知道我们想要忽略的测试在某些时候是不相关的,但以后必须重新启用。所以我们想看看所有其他测试是否会成功/失败,知道我们将跳过不相关的测试(我们跳过它们的事实将在报告中可见)。

        【讨论】:

        • 我听说过,但是我在哪里可以找到报告? Netbeans 不会在可视 JUnit 运行器中报告它。
        • 我不了解 Netbeans,我在终端中使用 maven 命令(mvn test / integration-test)。默认情况下,报告在 target/failsafe-reports 或 surefire-reports 中生成,但可以自定义目标文件夹。但是在 Netbeans 中,您没有得到包含 X Tests, X1 Failures, X2 Errors, X3 Skipped 的摘要吗?跳过的测试数量是从 @Ignore 注释中推断出来的。
        猜你喜欢
        • 2010-09-29
        • 2017-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-22
        • 1970-01-01
        • 2014-07-04
        • 1970-01-01
        相关资源
        最近更新 更多