50

自从我开始这个项目以来,我一直在使用 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)
4

14 回答 14

62

好的,我修好了。

在菜单中的文件下,有一个无效缓存选项。那解决了它!

于 2012-10-31T14:27:41.710 回答
43

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

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

将目录标记为 -> 源根目录

在此处输入图像描述

于 2016-04-23T15:27:39.960 回答
34

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

public class TestMe {
   @Test
   public void shouldTest(){
      Assert.assertEquals("test", "test");
   }
}
于 2020-06-06T11:23:30.100 回答
18

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

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

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

于 2017-04-27T09:04:36.280 回答
4

就我而言,我们正在从 JUnit 4 迁移到 JUnit 5,我将它们混合@Test在一起。

简而言之:

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

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

于 2019-05-10T11:49:23.923 回答
3

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

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

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

于 2019-07-10T23:44:28.553 回答
3

Ubuntu 20.04我用,Java 11.0.8-zulu和遇到了这个问题Intellij 2020.2

Junit5.5.2to5.6.2Junit Platformfrom升级1.5.21.6.2我解决了这个问题。

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

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

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

于 2020-08-10T10:01:39.247 回答
3

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

于 2018-11-26T22:30:50.437 回答
1

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

于 2019-11-12T09:48:30.270 回答
1

就我而言,我必须:

  • 关闭项目
  • 打开 build.gradle 文件
  • 覆盖现有项目?是的
  • 右键单击项目
    • 将目录标记为 >Resources Root
于 2018-05-10T11:40:22.130 回答
1

尝试更改 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>
于 2019-11-04T04:28:51.487 回答
0

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

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

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

于 2018-10-14T22:51:21.917 回答
0

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

File > Settings > Build Tools > Gradle > Run Tests With > IntelliJ Test Runner

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

于 2019-09-04T03:37:51.633 回答
0

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

于 2022-01-16T14:23:23.223 回答