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

问题描述 投票:0回答:8

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

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

我手动添加了

@Ignore
注释。但是,当我运行测试时,JUnit 会在“失败”下列出该方法以及其他类似方法,而不是忽略它们(相关: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 运行案例。

java junit
8个回答
53
投票
  1. 确保导入正确的

    @Ignore
    。确保明确使用
    @org.junit.Ignore

  2. 仔细检查您的测试是否由 JUnit 4 而不是 3 执行。最简单的方法是更改测试名称,使其不带有

    test
    前缀(现在根本不应该执行它,并且JUnit 4 无论如何都不需要这个前缀)或检查您的测试用例继承层次结构:它不应该直接或间接地从
    junit.framework.TestCase
    (Junit 3 要求)扩展。


21
投票

在 JUnit5 中使用

@Disabled
@Disabled("Reason text")


7
投票

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


2
投票

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

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

尝试删除

target/test-classes
文件夹。


1
投票

就我而言,我发现我的 IDE 正在执行测试,而忽略了

@Ignore
注释。当我运行
mvn install
(或任何其他 Maven 阶段)时,测试被跳过,这就是我真正的目标(参见附图)。

执行方式图解


1
投票

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

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

0
投票

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

JUnit 忽略


0
投票

一种行不通的情况是

如果您使用Junit5中的测试注释,则与Junit4中的忽略注释混合将不起作用!

© www.soinside.com 2019 - 2024. All rights reserved.