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

问题描述 投票:19回答:6

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

Process finished with exit code 0

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

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

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)
java junit intellij-idea
6个回答
28
投票

好的,我修好了。

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


18
投票

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

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

将目录标记为 - >源根

enter image description here


4
投票

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

Alt +在类中输入 - > create test:IJ(2017.1.1)提出Arquillian Junit作为测试库的第一个选项,并且通过使用它,测试类和方法创建时没有“公共”标识符。然后,如果决定将测试库更改为JUnit,则很容易忘记缺少“公共”标识符,这会导致测试不被IJ识别。当然,解决方案是放置“公共”标识符。

虽然这不是你发生的事情,但它有相同的结果,因此这个答案可以帮助其他人经历相同的症状。


1
投票

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


0
投票

在我的情况下,我不得不:

  • 关闭项目
  • 打开build.gradle文件
  • 覆盖现有项目?是
  • 右键单击项目 将目录标记为> Resources Root

0
投票

如果您使用IntelliJ进行测试执行和调试,而不是用于编辑。您的其他编辑器/ IDE可能正在与IntelliJ争夺生成文件(*.class)的控制权 - 导致IntelliJ报告未找到任何测试(也可能是虚假的构建错误)。

就我而言,Visual Studio Code似乎具有这种效果(在最近对这两个工具进行更新之后)。

我找到的解决方案是关闭Visual Studio Code,然后使用IntelliJ或命令行清理重建项目。换句话说,我的双IDE工作流程不再有效 - 所以我必须在IntelliJ中进行编辑。

© www.soinside.com 2019 - 2024. All rights reserved.