【问题标题】:What can cause JUnit to disregard @Ignore annotations?什么会导致 JUnit 忽略 @Ignore 注释?
【发布时间】:2021-12-15 16:31:33
【问题描述】:

我刚刚使用 MyEclipse 自动生成了一些 JUnit 测试用例。生成的方法之一如下所示:

@Ignore("Ignored") @Test
public void testCreateRevision()
{
    fail("Not yet implemented"); // TODO
}

我手动添加了@Ignore 注释。但是,当我运行测试时,JUnit 在“失败”下列出了该方法和其他类似方法,而不是忽略它们(相关:What's the difference between failure and error in JUnit?)。它显示“尚未实现”消息而不是“忽略”消息。显然,fail() 必须被调用,因此,@Ignore 断言不起作用。

这里发生了什么?我需要启用什么设置才能使其正常工作吗?

编辑:
到目前为止我考虑过/尝试过的事情:

  • 我使用的是 JUnit 4,所以不是版本问题。
  • 我正在导入org.junit.Ignore,所以这不是使用错误Ignore 的情况。
  • 我试过单独使用@Ignore@Ignore @Test@Ignore("message") @Test;都失败了。

编辑 2:
我通过 New > Other; Java > JUnit > JUnit Test Case; New JUnit 4 test 使用 MyEclipse 创建了测试,我的构建路径中的库是 JUnit 4。我正在使用 ant 构建并实际使用 MyEclipse 运行案例。

【问题讨论】:

  • 疯狂猜测:查看您的导入语句并确保注释是 org.junit.Ignore 或任何它应该是的,而不是来自完全不同的包的其他注释,恰好具有相同的名称.
  • @Matrix,好主意,但我确实有正确的导入。
  • 您运行 JUnit 3 还是 Junit 4? JUnit 3 将忽略注释。要找出答案,请将方法重命名为不以test 开头并删除@Ignore 注释并重试。如果测试没有执行意味着你正在运行 Junit 3
  • 正如我在帖子的初始版本和编辑版本中所述,我使用的是 JUnit 4。
  • 您如何运行测试 - 在 IDE 中,来自 Maven、Ant 等?您如何验证测试是使用 JUnit 4 运行器运行的?

标签: java junit


【解决方案1】:
  1. 确保您正在导入正确的@Ignore。确保明确使用@org.junit.Ignore

  2. 仔细检查您的测试是否由 JUnit 4 而非 3 执行。最简单的方法是更改​​测试名称,使其不以 test 为前缀(现在不应该是完全执行并且 JUnit 4 无论如何都不需要此前缀)或检查您的测试用例继承层次结构:它不应该直接或间接从 junit.framework.TestCase 扩展(Junit 3 要求)。

【讨论】:

  • 我是,它是;在您撰写此答案时,我更新了我的帖子。不过谢谢!
  • 啊,事实证明这是对的!有人在我工作时将超类修改为 JUnit 3,而我并不知道。
  • 谢谢你,先生,你真棒
【解决方案2】:

即使 JUnit 3 不在我的类路径中,我也遇到了这个问题。我相信 Junit 4 上的兼容模式会在您的测试名称中使用“测试”前缀,因此会像 JUnit 3 那样运行,而不是使用 @Ignore。解决方案是重命名您的测试。

【讨论】:

  • 太棒了,这有帮助。这令人沮丧,因为 maven 构建忽略了@ignore,然后失败了。谢谢!
  • 我注意到的另一件事是,新版本的surefire插件(版本> = 2.8)与带有@Ignore注释的testXyz一起使用,因此您无需重命名方法。
【解决方案3】:

你确定测试类被重新编译了吗?

这是一个很常见的问题,重新编译失败是因为源代码中的某处存在拼写错误(例如缺少分号),并且 IDE 不会告诉您编译失败。

尝试删除target/test-classes 文件夹。

【讨论】:

  • 或只使用 Project > Clean
  • @MatrixFrog:我有点不喜欢mvn clean:删除target 总是比调用clean 快。此外,如果您有一个包含许多类和生成代码的项目,那么清理删除的内容会超出适当的范围。
  • 花了我一段时间才找到它们(这是别人的构建脚本,我还不熟悉)但这似乎不是我的问题。
【解决方案4】:

就我而言,我发现我的 IDE 正在执行测试,而忽略了 @Ignore 注释。当我运行 mvn install(或任何其他 maven 阶段)时,测试被跳过,这就是我的实际目标(见附件插图)。

Ilustration of ways of execution

【讨论】:

    【解决方案5】:

    在 JUnit5 中使用 @Disable@Disable("Reason text")

    【讨论】:

      【解决方案6】:

      我认为只是@Ignore 会跳过测试

      JUnit Ignore

      【讨论】:

      • 我确实尝试过,但您意识到您链接到的页面两者都有,对吧? "例如:@Ignore @Test public void something() { ..."
      【解决方案7】:

      确保测试类也被导入为我解决了这个问题,即

      import org.junit.Ignore;
      import org.junit.Test;
      

      【讨论】:

        猜你喜欢
        • 2016-03-08
        • 1970-01-01
        • 1970-01-01
        • 2011-03-28
        • 2013-09-06
        • 2015-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多