繁体   English   中英

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

[英]What can cause JUnit to disregard @Ignore annotations?

我只是用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 @Ignore("message") @Test 都失败了。

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

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

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

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

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

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

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

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

执行方式的说明

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

JUnit 忽略

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM