找不到类:IntelliJ中的空测试套件


183

我刚刚在我的大学开始计算机科学计划,而IntelliJ遇到了一些问题。当我尝试运行单元测试时,我收到消息

Process finished with exit code 1
Class not found: "edu.macalester.comp124.hw0.AreaTest"Empty test suite.

我还在屏幕左侧看到一条消息,标题为“未找到测试”。我的测试代码在这里:

package edu.macalester.comp124.hw0;


import org.junit.Test;
import static org.junit.Assert.*;

public class AreaTest {

    @Test
    public void testSquare() {
    assertEquals(Area.getSquareArea(3.0), 9.0, 0.001);
    }

    @Test
    public void testCircle() {
    assertEquals(Area.getCircleArea(3.0), 28.2743, 0.001);
    }
}

我的项目代码在这里:

package edu.macalester.comp124.hw0;

import java.lang.Math;
public class Area {

/**
 * Calculates the area of a square.
 * @param sideLength The length of the side of a square
 * @return The area
 */
public static double getSquareArea(double sideLength) {
    // Has been replaced by correct formula
    return sideLength * sideLength;
}

/**
 * Calculates the area of a circle.
 * @param radius The radius of the circle
 * @return The area
 */
public static double getCircleArea(double radius) {
    // Replaced by correct value
    return radius * 2 * Math.PI;
}

}

我如何才能使测试正常工作?我使用的是IntelliJ IDEA CE的最新版本。


7
太多事情可能出错。对我来说,这就像mvn clean package在终端上键入一样简单。不确定IntelliJ为什么一开始就错误地导入了项目。
MarkHu '17

1
对我来说,只需将该文件夹设置为“测试资源根目录”即可
Xin Meng


Build-> Clean and Build-> Rebuild对我来说足够了。
gustavoknz

Answers:


109

有相同的消息。我必须删除“运行/调试”配置。

就我而言,我之前将单元测试作为本地测试运行。之后,我将测试移至androidTest包,并尝试再次运行它。Android Studio记住了上次运行的配置,因此尝试将其作为本地单元测试再次运行,从而产生相同的错误。

删除配置并再次运行测试后,它生成了一个新配置并开始工作。

在此处输入图片说明


我认为在大多数情况下,您的解决方案将是最通用,最不可思议的解决方案。像魅力一样在我的项目中工作。
ba3a

我尝试过,但是它不能单独工作。我还必须使现金无效。File > Cashes / Restart
Lukasz

我尝试过,也使兑现无效。但是仍然不起作用。
翅膀

在我记得单击明显的“确定”按钮而不是仅关闭对话框后,这对我
有用

我在Android Studio中看不到任何“ Special Instrumentation运行程序”条目。
大卫

58

我去了

File -> Invalidate Caches/Restart...

然后它对我有用。


6
我这样做了,然后还必须删除测试配置。
约翰·汉肯斯

对于我而言,这没有帮助。
user3791111

文件>使缓存无效/重新启动> 只是重新启动对我
有用

49

我遇到过同样的问题。我重建了项目,这对我有所帮助。

转到构建 -> 重建项目

之后,如果您使用的是Maven工具,建议您使用选项“ 重新导入所有Maven项目”


如果没有帮助,请尝试其他可能的解决方案:

  • 转到文件 ->使高速缓存无效/重新启动 ->使无效并重新启动

要么:

  • 在您的Maven项目结构src / main / java中,右键单击java目录,然后选择选项将目录标记为 -> Sources Root

    同样对test目录执行相同的操作,因此:src / test / java右键单击java目录并选择选项Mark directory as- > 测试源根

要么:

  • 转到运行 -> 编辑配置,然后在JUnit部分中删除测试配置。应用更改。之后,请尝试运行测试。新配置应自动创建。

要么:

  • 转到文件->项目结构,选择模块,然后选择适当的模块并转到路径选项卡。
    检查选项:应选择
    单选按钮“ 使用模块编译”输出路径

    输出路径应在项目内部。还测试输出路径应该是你的项目目录里面。例如,它看起来类似:
    输出路径: C:\ path \ to \ your \ module \ yourModule \ target \ classes
    测试输出路径: C:\ path \ to \ your \ module \ yourModule \ target \ test-classes

    排除输出路径应取消选择。

10
重建项目(Build -> Rebuild Project)对我有用。谢谢!
Francisco

这个解决方案对我有用,这是关于模块和使用输出路径的最后一件事。谢谢。
Mohammad Ganji '18

作为更绝望的解决方案,请删除.idea文件,然后再次打开项目。但是,您将丢失一些配置/设置。
亚伦

设置<project-root>/src/test/java为测试根,Build -> Rebuild Project为我工作。同样,当包含测试的类位于以包名称开头的包中时java.*,我得到了Security Exception。
首席酋长

问题在于,依赖关系已经过时了
-dellasavia

17

如果您的测试文件夹已作为单独的模块导入(在项目视图的文件夹图标上显示一个小方块),则也可能会发生这种情况。
通过在项目视图中选择测试文件夹来删除模块,然后按DEL
然后开始测试。
如果出现带有错误消息的弹出对话框,表明未选择任何模块,请从下拉列表中指定您的根模块。


3
这也是我的问题(测试文件夹上的方块-不会知道是什么意思!);为了解决这个问题,我打开了运行配置,发现将“使用模块的类路径:”设置为测试模块。我改为将其更改为项目的类路径,并且效果很好。感谢您指出“单独的模块”问题!
Redboot's

这正是我发生的事情。我使用start.spring.io创建了一个Spring项目并打开了它。之后,我启动了SpringBootTest并遇到了“找不到类:“ ...”空测试套件“错误。在遵循您的解决方案并按测试文件夹上的DELETE按钮并重新创建运行配置之后,一切都很好。附加提示:当按下测试文件夹上的Delete按钮时,会出现一个对话框,提示“不会删除任何文件”。因此,不用担心按下按钮。
kleenxcoder

14

开始新的IntelliJ项目后,我遇到了类似的问题。我发现模块的“模块编译输出路径”未正确指定。当我将模块的“编译输出路径”中的路径分配到正确的位置时,问题已解决。在项目设置中分配了编译输出路径。在模块下,选择涉及的模块,然后选择路径选项卡...

项目设置|路径中的路径选项卡 模块对话框

屏幕截图

...我将编译器输出发送到父项目文件夹中存在的名为“输出”的文件夹。


14

就我而言,我将其他所有内容都放在正确的位置,但是我正在使用kotlin开发一个Java库。我只是忘了应用插件:

apply plugin: 'kotlin-android'

现在它正在按预期工作。


1
我也是。令人讨厌的是,创建模块时没有Kotlin选项。
Rupert Rawnsley

11

因此,我的问题是文件夹名称。我已经将代码文件夹命名为Classs 2016/2017,这是IntelliJ不喜欢的。只需删除斜杠(或路径中其他令人反感的字符),重新导入项目,您就可以开始了!


这对我有帮助。对于其他人,我在Dropbox中有该文件夹。当我将其从Dropbox中移出并重新导入时,问题就消失了。
米克·塞尔

这个答案值得诺贝尔和平奖!
阿里·阿巴斯·贾夫里

7

在Android Studio 3.0及更高版本中,有时将UI测试以某种方式解释为单元测试,并且不要求选择目标部署。您可以转到“编辑配置”并将其标记为集成测试,它将开始工作


另外,在Android Studio 3.0.1上,测试旁边的“运行”按钮不起作用。更新到3.1 Canary 8之后,它确实又开始工作了。
马克


6

如果项目存在编译问题,则可能无法运行测试。因此,首先构建项目为Build-> Build Project。成功编译后,重新运行测试。

如果无法解决问题,则只需关闭项目窗口并删除项目并重新导入为Gradle / Maven项目即可通过覆盖现有IntelliJ创建的文件为您进行所有设置,这将删除创建的无效缓存。

您也可以使缓存无效。

File -> Invalidate Caches/Restart


5

当我jar从Maven 导入某些文件时,我遇到了同样的问题,随后导致empty-test-suite错误。

就我而言,这是因为Maven重置了模块文件。我通过清除默认配置解决了该问题:

  1. 打开项目结构shift- ctrl- alt- s快捷方式

PModules源的屏幕截图

  1. 查看“模块”>“源”,然后填充“源”包或测试包。

5

我遇到了同样的问题(Android Studio 3.2 Canary 4),并且尝试了其他答案中描述的大多数建议-均未成功。注意这件事发生后,我从移动的文件test,以androidTest文件夹。它仍在运行配置中显示为测试而非仪器测试。

最后,我最终创建了一个新文件:

  1. 用不同的名称创建新的检测测试类。
  2. 复制课程中的所有代码。
  3. 运行。
  4. 删除旧类。
  5. 将新类重命名为所需名称。

不错的主意=)谢谢!
安德鲁·格罗

5

有趣的是,由于不同的原因,我已经多次面对这个问题。例如,使缓存无效并重新启动也有所帮助。

最后,我通过更正文件->项目结构->项目->项目编译器输出中的输出路径,将其修复为 absolute_path_of_package / out

例如:/ Users / random-guy / myWorkspace / src / DummyProject / out


这是使我的测试套件运行的原因!谢谢!
弗兰克,

4

重新导入项目或模块可以解决问题。我在开发时通过重命名程序包名称来解决此问题。但是输出路径测试输出路径是旧路径。因此,IntelliJ无法从旧路径中找到该类。因此,最简单的方法是校正输出路径和测试输出路径。

Intellij模块设置


由于某些原因,在MacO上,继承项目路径对我不起作用,您是否知道为什么会发生?
Johnny_D

@Johnny_D您确定您的问题是由于重命名软件包引起的吗?
Bejond

3

如果您的模块和/或项目jdk配置不正确,也会发生这种情况。


请说明“正确的配置”,我认为这对有此问题的用户没有帮助。谢谢!
eggmatters

3

删除.idea并重新导入SBT项目对我来说解决了这个问题。


它的工作原理删除.idea文件夹,并重新导入Maven项目(Y)之后
胺Soumiaa

对我来说也是一样。我经历了以上建议,但没有一个起作用。我删除了.idea基本文件夹以及子模块中的.iml文件。
丹尼斯

3

就我而言,IntelliJ出于奇怪的原因并没有编译测试源。我只是修改了构建配置,并clean test-compile在本Before launch节中添加了Maven目标。


尝试了以上所有方法,但仅此有所帮助:)谢谢!
安天卡

2

就我而言,测试名称:)有问题。

如果名字是: dummyNameTest然后没有找到任何测试,但是万一 testDummyName一切都OK


1

我遇到过同样的问题。就我而言,我在主文件夹之外的程序包/文件夹中有一些测试类。但是当我检查Run配置时,它总是试图在main文件夹中查找类(而不是main之外的包)。因此,如果是这种情况,则必须将包移动到“运行”配置指向的位置。或更改运行配置以指向您的软件包。


1

您的测试是否需要Android设备(仿真器或硬件)?
如果是这样,则称为“仪表测试”,并且位于“模块名称/ src / androidTest / java /”中。
如果不是,则称为“本地单元测试”,并且位于“模块名称/ src / test / java”中

https://developer.android.com/training/testing/start/index.html

因为编写了本地单元测试,所以我遇到了同样的错误,但是将其放置在用于仪器测试的文件夹中。将本地单元测试移动到“ src / test / java”文件夹对我来说已修复。



1

可能是因为该文件夹未设置为测试源,这可以通过“模块设置”>“模块”来完成。


1

对我来说,项目是在项目外部编译的。我只是改变路径。用于更改路径(我使用的是Mac)。

  • 转到文件->项目结构
  • 转到左侧的模块。
  • 选择路径,选择单选按钮(使用模块编译输出路径)
  • 提供项目内部的输出路径和测试输出路径
  • 取消选择“排除输出路径”。
  • 转到文件->单击无效缓存并重新启动

1

就我而言,问题已解决,方法是进入build.gradle并更改

dependencies {
    testImplementation 'junit:junit:4.12'
}

dependencies {
    testCompile 'junit:junit:4.12'
}

令人惊讶的是,这对我也有帮助。看起来它像这样迫使重新编译。在没有帮助的情况下尝试了几次清理/缓存
Dieter Menne

对于我来说,这就像我上面提出的解决方案一样,已经解决了这个问题。但是,原因是我使用的插件不支持“实现”命令。因此,我建议您可能要查看项目的某些插件是否也有更新。也许更好的方法是更新插件,因为Gradle希望弃用“ compile”命令
bremen_matt

1

我尝试了所有解决方案,但都无济于事。最后,我在调试模式下运行测试,然后开始工作。也许一些行家的缓存被清除了。很难说。有用。尝试mvn test -X


1

只需在“项目”窗口中的文件上单击鼠标右键,然后选择

“运行YourTest ”。

现在一切都开始正常,可能是因为错误的运行配置正在重新生成。


1

在安装新版本的IntelliJ并且IntelliJ插件尚未更新之后,可能会发生这种情况(至少对我来说是一次)。

您可能必须手动Check for updates…从IntelliJ帮助菜单执行操作。


1

在您的Maven项目结构src / main / java中,右键单击java目录,然后选择选项将目录标记为-> Sources Root

类似地,对测试目录执行相同的操作:src / test / java右键单击java目录,然后选择选项将目录标记为->测试源根

为我工作:-)



0

对我来说,是因为我的项目被编译到项目外部的目录中。在路径中,输出路径为\ production \ project_name和\ test \ project_name,将它们放置在C:\ production \ project_name中。将它们更改为项目的完整路径可以使我的测试访问类文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.