JUnit @Ignore有用吗?

时间:2011-07-15 12:49:10

标签: java unit-testing netbeans junit ignore

在JUnit中,您可以在方法之前使用@Ignore告诉测试运行器自动跳过这些测试。从我可以收集到的内容来看,这实际上只是一种方便的方法来记录/标记您想要稍后返回的不完整/不再有功能的测试。

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

6 个答案:

答案 0 :(得分:20)

  

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

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

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

  

@Ignore标签确实有多大用处

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

  

测试失败可能更有用,所以不会忽视它?

如果您想(并且可以)立即修复它,可以让它失败。有些情况下,你不能,但你仍然希望方法到处,准确地说它不会被遗忘。然后@Ignore才有意义。

答案 1 :(得分:9)

  • 最有可能没有注释的方法是实用方法,可能在测试中被其他方法使用。

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

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

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

  • JUnit 4 TestRunners将@Ignore'd测试显示为“已跳过”,这样您最终可以看到有多少测试通过/失败/跳过。

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

答案 2 :(得分:4)

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

答案 3 :(得分:3)

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

  • 您可以包含对忽略测试原因的说明:

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

enter image description here

答案 4 :(得分:1)

使用@Ignore而不是注释@Test的优势在于Hudson / Jenkins将此视为忽略测试,并相应地在测试结果中显示。因此,您会被提醒有关被忽略的测试,这是一个很大的好处!

答案 5 :(得分:0)

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