什么原因会导致JUnit忽略@Ignore注解?

wf82jlnq  于 2022-11-11  发布在  其他
关注(0)|答案(7)|浏览(200)

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

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

我手动添加了@Ignore注解。但是,当我运行测试时,JUnit将该方法以及其他类似的方法列在“failures”下,而不是忽略它们(相关内容:What's the difference between failure and error in JUnit?)。并且它显示“尚未实现”消息,而不是“忽略”消息。显然,fail()必须被调用,因此@IgnoreAssert不起作用。
这是怎么回事?是否需要启用某个设置才能使其正常工作?

编辑:

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

  • 我使用的是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运行了这个案例。

agxfikkp

agxfikkp1#

1.请确保导入的是正确的@Ignore。为确保正确,请明确使用@org.junit.Ignore
1.仔细检查您的测试是否由JUnit 4而不是3执行。最简单的方法是更改测试名称,使其不以test作为前缀(现在它根本不应执行,而且JUnit 4也不需要此前缀),或者检查您的测试用例继承层次结构:它不应该直接或间接地从junit.framework.TestCase扩展(Junit 3要求)。

1zmg4dgp

1zmg4dgp2#

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

mqkwyuun

mqkwyuun3#

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

pjngdqdw

pjngdqdw4#

是否确实重新编译了测试类?
这是一个很常见的问题,因为源代码中的某个地方有打字错误(如缺少分号),所以重新编译失败,IDE不会告诉您编译失败。
请尝试删除target/test-classes文件夹。

gupuwyp2

gupuwyp25#

在我的例子中,我发现我的IDE在执行测试时忽略了@Ignore注解。当我运行mvn install(或任何其他maven阶段)时,测试被跳过了,这正是我实际上的目标(见附件)。
Ilustration of ways of execution

lxkprmvk

lxkprmvk6#

我想它只是@忽略,将跳过测试
JUnit Ignore

0qx6xfy6

0qx6xfy67#

确保测试类也被导入为我解决了这个问题,即。

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

相关问题