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

时间:2011-06-02 17:26:33

标签: java junit ignore

我刚刚使用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:
我使用MyEclipse通过New > Other; Java > JUnit > JUnit Test Case; New JUnit 4 test创建了测试,我的构建路径中的库是JUnit 4.我正在使用ant构建并实际运行MyEclipse的案例。

6 个答案:

答案 0 :(得分:42)

  1. 确保您导入了正确的@Ignore。确保明确使用@org.junit.Ignore

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

答案 1 :(得分:4)

即使JUnit 3不在我的类路径上,我也遇到了这个问题。我相信Junit 4上的兼容模式会在你的testname中找到'test'前缀,因此作为JUnit 3运行而不是拿起@Ignore。解决方案是重命名您的测试。

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:1)

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

Ilustration of ways of execution

答案 4 :(得分:0)

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

JUnit Ignore

答案 5 :(得分:0)

确保也导入了测试类,对我来说就是这样,

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