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

时间:2012-10-31 12:19:06

标签: java junit intellij-idea

我正在使用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)

12 个答案:

答案 0 :(得分:28)

好的,我修好了。

在菜单中的File下,有一个invalidate cache选项。修好了!

答案 1 :(得分:21)

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

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

标记目录为 - >来源根

enter image description here

答案 2 :(得分:9)

由于某种原因,Intellij Idea无法将未明确公开的类识别为Test类,以防该类具有默认访问规范,因此不会将其标记为测试。尝试更改班级以符合此规则。 示例:

public class TestMe {
          
 @Test
          
 public void shouldTest(){
           
     Assert.assertEquals("test", "test");
 }
}

答案 3 :(得分:4)

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

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

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

答案 4 :(得分:2)

我遇到了Ubuntu 20.04Java 11.0.8-zuluIntellij 2020.2这个问题。

Junit5.5.2升级到5.6.2,将Junit Platform1.5.2升级到1.6.2为我解决了这个问题。

这对我来说似乎很奇怪,所以我改回了版本,现在也可以使用。我认为某种缓存无效化可能是最好的解释,尽管与此相对应的按钮对我不起作用。

所以基本上,这里https://stackoverflow.com/a/58687202/6476706所说的(我试图在那儿发表评论,但不能...)。

无论如何,2020年仍然是一个问题,也许这对某人有帮助。

答案 5 :(得分:1)

通过...打开文件->项目结构将其修复了几次。在那里,在左侧菜单中的最后一个条目中查找“问题”计数(如果大于零,则为0)。单击这些,然后针对模块/库中intellij中红色突出显示的每个问题,将其删除(减号按钮)。由于intellij无法识别结构,因此将为它们指定模块名称,例如“ test1..23”。删除所有标记为红色后,关闭并重新启动intellij。在此阶段不要运行Maven刷新,因为它会再次引入相同的错误。重新启动intellij将再次触发对项目enter image description here结构的新扫描。

答案 6 :(得分:0)

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

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

我找到的解决方案是关闭Visual Studio代码,然后使用IntelliJ或从命令行中干净地重建项目。换句话说,我的双IDE工作流程不再起作用-因此我必须在IntelliJ中进行编辑。

答案 7 :(得分:0)

在我的情况下,我们从JUnit 4迁移到JUnit 5,我混合了其中的@Test

简而言之:

  • 如果您使用JUnit 4的@RunWith(),则必须使用@org.junit.Test注释测试方法。
  • 如果您使用JUnit 5的@ExtendWith(),则必须使用@org.junit.jupiter.api.Test

当我更改导入时,我的类可以再次作为测试类运行。

答案 8 :(得分:0)

在使用Junit Jupiter 5.5.0的IDEA 2019.1.2(或-.3)中,之前的答案都没有为我工作。我已经从其他计算机上git-closures了几个我推到GitHub的项目,他们的测试运行良好。在我的新笔记本电脑上,无论尝试如何运行,都得到“未找到测试”。

最终有效的方法是:我删除了IDEA生成的 test.iml 文件,因为我发现在创建的原始项目中没有这样的文件只是为了查看是否可以运行测试完全可以(我确实可以)。在两个旧项目中删除此文件后,测试运行良好。没有新的 test.iml 生成。

我不知道这些文件是如何生成或何时生成的。因为git仓库是私有的,所以我不必费心gitignore IDEA的*。* ml文件;但是,它们不在GitHub仓库中。此外,它们是项目的基础,而不是.idea目录。

答案 9 :(得分:0)

一个糟糕的解决方法是让IntelliJ运行测试而不是Gradle。

文件>设置>生成工具> Gradle>使用> IntelliJ Test Runner运行测试

这与Gradle上的另一个测试框架类似。 https://youtrack.jetbrains.com/issue/IDEA-221159

答案 10 :(得分:0)

尝试更改JUnit依赖版本。一个释放向前或向后。它可以帮助使测试缓存无效。

如果使用Maven或Gradle等依赖项管理工具,请转到.pom或.gradle文件并更改JUnit库的版本。

例如,将版本部分中的4.11更改为4.12或4.10:

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <!-- change here -->
      <version>4.11</version>
      <scope>test</scope>
   </dependency>
</dependencies>

答案 11 :(得分:0)

我最终对项目的所有模块中的每个源根目录进行了手动分类并测试了源根目录。像魅力一样工作。