是什么导致JUnit无视@Ignore注释?

Pop*_*ops 28 java junit ignore

我只是使用MyEclipse自动生成一些JUnit测试用例.其中一个生成的方法如下所示:

@Ignore("Ignored") @Test
public void testCreateRevision()
{
    fail("Not yet implemented"); // TODO
}
Run Code Online (Sandbox Code Playgroud)

@Ignore手动添加了注释.但是,当我运行测试时,JUnit会在"失败"下列出该方法和其他类似方法,而不是忽略它们(相关:JUnit中的失败和错误有什么区别?).它显示"尚未实现"消息而不是"忽略"消息.显然,fail()必须被调用,因此,@Ignore断言不起作用.

这里发生了什么?我需要启用这个设置吗?

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

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

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

Tom*_*icz 44

  1. 确保您正在导入权利@Ignore.一定要@org.junit.Ignore明确使用.

  2. 仔细检查JUnit 4是否正在执行您的测试,而不是3.执行此操作的最简单方法是更改​​测试名称,使其不加前缀test(现在不应该执行它,而JUnit 4不需要无论如何这个前缀)或检查你的测试用例继承层次结构:它不应该直接或间接地扩展junit.framework.TestCase(Junit 3要求).

  • 哎呀,结果证明是对的!在我工作的时候,其他人修改了一个超类是JUnit 3,我不知道它. (2认同)

Fal*_*ign 15

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


com*_*ird 6

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