为什么Intellij IDEA突然无法识别测试文件夹中的测试?

Djo*_*vic 26 java junit intellij-idea

自从我开始这个项目以来,我正在使用JUnit,一切正常.我有几百个测试,当然,我在这里和那里开始.右键单击根测试文件夹,使用JUnit运行(或调试).但是从昨天开始,当我这样做时,结果是:

Process finished with exit code 0
Run Code Online (Sandbox Code Playgroud)

没有开始任何测试.文件夹树中的任何文件夹都是一样的.我仍然可以运行一个测试类,但我真的需要一个选项来启动它们.如果您有任何想法,请将它们放在这里.

以下是我尝试运行测试时记录的内容:

2012-10-31 15:16:55,693 [2727217]  ERROR - ij.psi.impl.source.PsiFileImpl - IntelliJ IDEA 11.1.2  Build #IU-117.418 
2012-10-31 15:16:55,693 [2727217]  ERROR - ij.psi.impl.source.PsiFileImpl - JDK: 1.6.0_31 
2012-10-31 15:16:55,693 [2727217]  ERROR - ij.psi.impl.source.PsiFileImpl - VM: Java HotSpot(TM) Client VM 
2012-10-31 15:16:55,693 [2727217]  ERROR - ij.psi.impl.source.PsiFileImpl - Vendor: Sun Microsystems Inc. 
2012-10-31 15:16:55,693 [2727217]  ERROR - ij.psi.impl.source.PsiFileImpl - OS: Windows 7 
2012-10-31 15:16:55,693 [2727217]  ERROR - ij.psi.impl.source.PsiFileImpl - Last Action: RunClass 
2012-10-31 15:16:55,693 [2727217]  ERROR - m.intellij.util.ExecutorsQuery - com.intellij.psi.tree.IFileElementType cannot be cast to com.intellij.psi.tree.IStubFileElementType 
java.lang.ClassCastException: com.intellij.psi.tree.IFileElementType cannot be cast to com.intellij.psi.tree.IStubFileElementType
    at com.intellij.psi.impl.source.PsiFileImpl.calcStubTree(PsiFileImpl.java:976)
    at com.intellij.psi.stubs.StubIndexImpl$1.perform(StubIndexImpl.java:239)
    at com.intellij.psi.stubs.StubIndexImpl$1.perform(StubIndexImpl.java:220)
    at com.intellij.util.indexing.ValueContainer.forEach(ValueContainer.java:60)
    at com.intellij.psi.stubs.StubIndexImpl.process(StubIndexImpl.java:220)
    at com.intellij.psi.stubs.StubIndexImpl.get(StubIndexImpl.java:194)
    at com.intellij.psi.stubs.AbstractStubIndex.get(AbstractStubIndex.java:33)
    at com.intellij.psi.impl.java.stubs.index.JavaAnnotationIndex.get(JavaAnnotationIndex.java:47)
    at com.intellij.psi.impl.search.AnnotatedElementsSearcher.a(AnnotatedElementsSearcher.java:93)
    at com.intellij.psi.impl.search.AnnotatedElementsSearcher.execute(AnnotatedElementsSearcher.java:44)
    at com.intellij.psi.impl.search.AnnotatedElementsSearcher.execute(AnnotatedElementsSearcher.java:28)
    at com.intellij.util.ExecutorsQuery.processResults(ExecutorsQuery.java:42)
    at com.intellij.util.AbstractQuery.forEach(AbstractQuery.java:67)
    at com.intellij.util.InstanceofQuery.forEach(InstanceofQuery.java:54)
    at com.intellij.execution.ConfigurationUtil.addAnnotatedMethodsAnSubclasses(ConfigurationUtil.java:97)
    at com.intellij.execution.ConfigurationUtil.findAllTestClasses(ConfigurationUtil.java:77)
    at com.intellij.execution.junit.TestPackage$MySearchForTestsTask.run(TestPackage.java:397)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl$TaskRunnable.run(ProgressManagerImpl.java:469)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl$2.run(ProgressManagerImpl.java:178)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:218)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.runProcess(ProgressManagerImpl.java:169)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl$8.run(ProgressManagerImpl.java:378)
    at com.intellij.openapi.application.impl.ApplicationImpl$6.run(ApplicationImpl.java:434)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
    at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:145)
Run Code Online (Sandbox Code Playgroud)

Djo*_*vic 36

好的,我修好了.

在菜单中的"文件"下,有一个invalidate cache选项.修好了!

  • 这对我不起作用。:(还有其他解决方案吗? (7认同)
  • 我们应该建议创意团队将“无效缓存”重命名为“神奇地解决您的问题” (4认同)
  • 来吧,这是 IntelliJ 最烦人的方面......搜索几个小时寻找解决方案,然后这个默认答案......类似于“重新启动 Windows”。 (3认同)
  • 此缓存选项是非常不可预测的解决方法.希望IDEA开发人员能为我们修复案例或自动化它们:) (2认同)
  • 11年过去了,这个问题还没有解决吗?来吧 IntelliJ。清除缓存应该是最后的手段,而不是永久的解决方案。 (2认同)

Вла*_*ник 26

出于某种原因,Intellij Idea 不会将类识别为未明确公开的测试类,如果类具有默认访问规范,则不会将其标记为测试。尝试更改课程以满足此规则。例子:

public class TestMe {
   @Test
   public void shouldTest(){
      Assert.assertEquals("test", "test");
   }
}
Run Code Online (Sandbox Code Playgroud)


LeT*_*Tex 25

在最新的IDE(从Community Edition 2016.1开始)中,此选项更加简化.

右键单击要识别为源文件夹的文件夹:

将目录标记为 - >源根

在此输入图像描述

  • 但如果你有多模块项目,手动在各处设置它真的很麻烦:( (2认同)

Joã*_*tos 5

只是添加了一个不同的场景,这发生在我和我的一些同事身上:

在类中的Alt + enter->创建测试:IJ(2017.1.1)提出将Arquillian Junit作为测试库的第一个选项,并与之一起创建没有'public'标识符的测试类和方法。然后,如果决定将测试库更改为JUnit,则很容易忘记缺少“公共”标识符,这会导致IJ无法识别测试。当然,解决方案是放置“公共”标识符。

尽管这不是发生在您身上的结果,但它具有相同的结果,因此,此答案可能会帮助其他经历相同症状的人。


use*_*213 5

通过...打开文件 --> 项目结构修复了这个问题几次。在那里,查看左侧菜单,因为最后一个条目有“问题”计数(如果大于零)。单击这些,然后对于模块/库中 intellij 中以红色突出显示的每个问题,删除它们(减号按钮)。它们将被赋予诸如“test1..23”之类的模块名称,因为 intellij 无法识别结构。删除所有标记为红色的内容后,关闭+重新启动intellij。在此阶段不要运行 Maven刷新,因为它会再次引入相同的错误。通过重新启动intellij将触发项目的新扫描在此输入图像描述再次结构。