我刚刚使用MyEclipse自动生成一些JUnit测试用例。生成的方法之一如下所示:
@Ignore("Ignored") @Test
public void testCreateRevision()
{
fail("Not yet implemented"); // TODO
}
我手动添加了
@Ignore
注释。但是,当我运行测试时,JUnit 会在“失败”下列出该方法以及其他类似方法,而不是忽略它们(相关:JUnit 中的失败和错误之间有什么区别?)。它显示“尚未实施”消息而不是“已忽略”消息。显然,fail()
一定被调用,因此,@Ignore
断言不起作用。
这是怎么回事?我需要启用某个设置才能使其正常工作吗?
编辑:
到目前为止我考虑过/尝试过的事情:
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 运行案例。
确保导入正确的
@Ignore
。确保明确使用 @org.junit.Ignore
。仔细检查您的测试是否由 JUnit 4 而不是 3 执行。最简单的方法是更改测试名称,使其不带有
test
前缀(现在根本不应该执行它,并且JUnit 4 无论如何都不需要这个前缀)或检查您的测试用例继承层次结构:它不应该直接或间接地从junit.framework.TestCase
(Junit 3 要求)扩展。在 JUnit5 中使用
@Disabled
或 @Disabled("Reason text")
即使 JUnit 3 不在我的类路径上,我也遇到了这个问题。我相信 Junit 4 上的兼容模式会选择测试名称中的“test”前缀,从而像 JUnit 3 一样运行,而不是选择 @Ignore。解决方案是重命名您的测试。
您确定测试类已重新编译吗?
这是一个很常见的问题,重新编译失败是因为源代码中的某个地方存在拼写错误(例如缺少分号),并且 IDE 不会告诉您编译失败。
尝试删除
target/test-classes
文件夹。
就我而言,我发现我的 IDE 正在执行测试,而忽略了
@Ignore
注释。当我运行 mvn install
(或任何其他 Maven 阶段)时,测试被跳过,这就是我真正的目标(参见附图)。
确保测试类也被导入解决了我的问题,即
import org.junit.Ignore;
import org.junit.Test;
我认为只是@Ignore会跳过测试
一种行不通的情况是
如果您使用Junit5中的测试注释,则与Junit4中的忽略注释混合将不起作用!