繁体   English   中英

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

[英]Why does Intellij IDEA suddenly not recognize tests in test folder anymore?

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

Process finished with exit code 0

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

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

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)

好的,我修好了。

在菜单中的文件下,有一个无效缓存选项。 那就修好了!

在最新的 IDE(自 Community Edition 2016.1 起)上,此选项更加简化。

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

将目录标记为 -> 源根

在此处输入图片说明

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

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

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

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

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

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

就我而言,我们正在从 JUnit 4 迁移到 JUnit 5,并且我混合了它们的@Test

简而言之:

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

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

在使用 Junit Jupiter 5.5.0 的 IDEA 2019.1.2(或 -.3)中,以前的答案都不适合我。 我已经 git-clone 了几个我从另一台计算机推送到 GitHub 的项目,在那里他们的测试运行良好。 在我的新笔记本电脑上,无论我如何尝试运行它们,我都会收到“未找到测试”。

最终起作用的是:我删除了 IDEA 生成的test.iml文件,因为我注意到我创建的一个原始项目中没有这样的文件,只是为了看看我是否可以运行测试(我确实可以)。 在两个旧项目中删除此文件后,测试运行完美。 没有生成新的test.iml

我不知道这些文件是如何或何时生成的。 因为 git repos 是私有的,所以我没有费心去 gitignore IDEA 的 *.*ml 文件; 尽管如此,它们不在 GitHub 存储库中。 此外,它们位于项目的根目录中,而不是在 .idea 目录中。

我在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 年仍然是一个问题,也许这对某人有所帮助。

就我而言,我不得不:

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

尝试更改 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>

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

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

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

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

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

文件 > 设置 > 构建工具 > Gradle > 运行测试 > IntelliJ 测试运行器

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

对我来说,被测试的课程不是public的。 一旦我将其设置为public ,就会弹出绿色运行测试图标。 请注意,这只是 Junit 4 中的一个问题。

我有一个类似的问题。 花了一些时间后,我发现我已经在测试根目录下创建了 class 本身:-) 当我将 class 移动到主根目录时,一切对我来说都很好:-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM