Java 我可以强制Intellij IDEA运行忽略的测试吗?

Java 我可以强制Intellij IDEA运行忽略的测试吗?,java,junit,intellij-idea,junit4,Java,Junit,Intellij Idea,Junit4,我编写了一个性能测试类,标记为@Ignore,因为运行它需要很长时间,通常我不需要运行它。我希望能够右键单击其中一个@Test并说“run”,但在intellij中这样做时,它不会运行测试,因为该类被标记为忽略 我不想注释掉@Ignore,因为删除@Ignore后很容易意外提交文件。但我觉得如果我明确告诉Intellij运行测试,它应该运行它,而不管@Ignore。请记住,如果我运行一组类(例如:包中的所有类),我仍然希望忽略这个测试类 有可能在Intellij中获得此功能吗?我发现它表示可以使

我编写了一个性能测试类,标记为
@Ignore
,因为运行它需要很长时间,通常我不需要运行它。我希望能够右键单击其中一个
@Test
并说“run”,但在intellij中这样做时,它不会运行测试,因为该类被标记为忽略

我不想注释掉
@Ignore
,因为删除
@Ignore
后很容易意外提交文件。但我觉得如果我明确告诉Intellij运行测试,它应该运行它,而不管
@Ignore
。请记住,如果我运行一组类(例如:包中的所有类),我仍然希望忽略这个测试类

有可能在Intellij中获得此功能吗?

我发现它表示可以使用Aspect.assumeTrue执行一些棘手的操作,如果条件为false,它会将测试标记为已忽略,通常这是条件中使用的系统属性,因此可以在命令行上将其作为参数传递。IntelliJ允许您自定义命令行参数,因此它应该可以工作,但我自己还没有尝试过

链接中的示例是:

@Test
public void shouldTryEveryPossiblePhoneticAttributeSet() throws IOException {
    Assume.assumeTrue(TestEnvironment.hasBigParseSets());
    ...
}

public class TestEnvironment {
   private static final String HAS_BIG_PARSESETS = "hasBigParseSets";
   public static boolean hasBigParseSets(){
      return "true".equalsIgnoreCase(System.getProperty(HAS_BIG_PARSESETS));
   }
}
以及“mvn测试-p bigParseSets”与“mvn测试”


编辑:我刚刚在StackOverflow上找到了它,它告诉我们如何运行一个junit测试。我想我不需要引用它,因为它是在StackOverflow上发布的。这说明了如何从命令行执行此操作,但您应该能够执行与具有硬编码的类和方法名称值的类似的操作,然后右键单击SingleJUnitTestRunner类并要求IntelliJ运行它。

在我看来,为此滥用@Ignored注释不是一个好主意。也许把测试放在一个单独的套件中,只在需要时运行会更好。最终(在您的CI平台上)您希望测试以任何方式执行,因为这就是测试的目的。@k-mera啊,这是一个有趣的想法。这将需要更多的努力,因为我必须确保我的构建脚本配置为跳过它,但我可能会这样做。是的,我理解这个问题。一旦你提交了你的代码,所有的测试都应该对它进行测试。但是如果在本地花费大量时间,那么这可能会减慢开发速度。我同意@k-mera。此测试可能不应该用
@Ignore
注释,而应该用类似
@Category(SlowTest.class)
的注释。然后可以创建一个使用
@IncludeCategory(SlowTests.class)
的仅限CI的套件。丹尼尔,我同意你想要的行为,奇怪的是JetBrains在ReSharper中的测试运行程序就是这样做的
@Ignore
被不可撤销地忽略会使它毫无用处,imho,不妨先删除测试。这是一个很好的技巧,但它似乎不像人们希望的那样在Intellij上工作。出于某种原因,
Assume.assumeTrue(false)返回一个错误,而不是被忽略。我刚才说的最奇怪的是,你的链接显示的截图显示了相反的内容。我进一步研究了一下,发现这是因为我正在使用。我猜测试运行程序没有按照您想要的方式处理
假设。