Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么会导致JUnit忽略@Ignore注释?_Java_Junit_Ignore - Fatal编程技术网

Java 什么会导致JUnit忽略@Ignore注释?

Java 什么会导致JUnit忽略@Ignore注释?,java,junit,ignore,Java,Junit,Ignore,我刚刚使用MyEclipse自动生成了一些JUnit测试用例。生成的方法之一如下所示: @Ignore("Ignored") @Test public void testCreateRevision() { fail("Not yet implemented"); // TODO } 我手动添加了@Ignore注释。但是,当我运行测试时,JUnit会在“failures”下列出该方法以及其他类似方法,而不是忽略它们(related:)。并且它显示“尚未实现”消息,而不是“忽略”消息。显

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

@Ignore("Ignored") @Test
public void testCreateRevision()
{
    fail("Not yet implemented"); // TODO
}
我手动添加了
@Ignore
注释。但是,当我运行测试时,JUnit会在“failures”下列出该方法以及其他类似方法,而不是忽略它们(related:)。并且它显示“尚未实现”消息,而不是“忽略”消息。显然,
fail()
必须被调用,因此,
@Ignore
断言不起作用

这是怎么回事?是否需要启用一个设置才能使其工作

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

  • 我使用的是JUnit4,所以它不是版本问题
  • 我正在导入
    org.junit.Ignore
    ,因此使用的
    Ignore
    不是错误的
  • 我试过单独使用
    @Ignore
    @Ignore@Test
    @Ignore(“message”)@Test
    ;都失败了
编辑2:

我通过
New>Other使用MyEclipse创建了测试;Java>JUnit>JUnit测试用例;新的JUnit4测试
,我的构建路径中的库是JUnit4。我正在使用ant构建,并实际使用MyEclipse运行该案例。

我认为如果“忽略”,将跳过测试

  • 确保导入的是正确的
    @忽略
    。一定要明确使用
    @org.junit.Ignore

  • 仔细检查您的测试是否由JUnit4而不是JUnit3执行。最简单的方法是更改测试名称,使其不以
    test
    作为前缀(现在它根本不应该执行,JUnit4也不需要这个前缀),或者检查您的测试用例继承层次结构:它不应该直接或间接地从
    JUnit.framework.TestCase
    扩展(JUnit3要求)


  • 您确定测试类已重新编译吗

    这是一个非常常见的问题,重新编译失败是因为源代码中的某个地方有输入错误(比如缺少分号),IDE没有告诉您编译失败


    尝试删除目标/测试类文件夹。

    即使JUnit 3不在我的类路径上,我也遇到了这个问题。我相信JUnit 4上的兼容模式会在testname中的“test”前缀上出现,因此操作起来就像JUnit 3,而不是选择@Ignore。解决方法是重命名您的测试。

    在我的案例我发现我的IDE在执行测试时忽略了
    @Ignore
    注释。当我运行
    mvn install
    (或任何其他maven阶段)时,测试被跳过,这正是我实际的目标(请参阅附件说明)


    确保测试类也被导入修复了我的问题,即

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

    胡乱猜测:看看你的导入语句,确保注释是
    org.junit.Ignore
    或任何它应该是的东西,而不是来自一个完全不同的包的其他注释,只是碰巧有相同的名称。@Matrix,好主意,但我有正确的导入。你运行junit 3还是junit 4?junit 3将忽略e注释。要找到答案,请重命名该方法,使其不以
    test
    开头,并删除@Ignore注释,然后重试。如果测试未执行,则意味着您正在运行Junit 3,正如我在文章的初始版本和编辑版本中所述,我正在使用Junit 4。您是如何运行测试的?在IDE中,从Maven、Ant等处运行的?y是如何运行的你确认测试是用JUnit 4运行程序运行的吗?我是,它是;我在你写这个答案的时候更新了我的帖子。不过,谢谢!啊,结果证明这是对的!在我工作的时候,有人将一个超类修改为JUnit 3,我不知道。谢谢你,先生,你太棒了,或者只是在使用Project>Clean@MatrixFrog:我有点不喜欢
    mvn clean
    :删除
    target
    总是比调用clean更快。此外,如果您有一个包含许多类和生成代码的项目,clean删除的操作会更合适。我花了一段时间才找到它们(这是其他人的构建脚本,我还不熟悉)但这似乎不是我的问题。我确实试过了,但你意识到你链接到的页面两者都有,对吗?“例如:
    @Ignore@Test public void something(){…
    ”棒极了,这很有帮助。这让人沮丧,因为maven构建忽略了@ignore,然后失败了。谢谢!我注意到的另一件事是,新版本的surefire插件(版本>=2.8)与带有@ignore注释的testXyz一起工作,所以您不需要重命名方法。