在Android Studio运行单元测试时出现“未找到类:空测试套件”错误

64

我有一个针对我的Android应用程序的测试套件,所有单元测试都运行良好。但是,每当我在其中一个单元测试类中进行一次更改(例如ModelUnitTests),尝试再次运行该类时,我会收到以下消息

Process finished with exit code 1
Class not found: "xxx.xxxxxx.xxx.ModelUnitTests"Empty test suite.

如果我执行gradle clean,然后再次运行类测试,它会正常运行(但需要4分钟...),但是一旦进行新更改,它就会再次失败。

有什么建议可以解决这个问题吗?我不确定应该发布哪个测试配置。我正在使用Unit Tests组件,并且我的测试位于module/src/test/package文件夹中。


如果您正在使用Robolectric,请检查测试文件是否位于$MODULE$/test目录而不是$MODULE$/androidTest目录中。这种情况也发生在我身上过,我花了大约一个小时才解决。 - crgarridos
我有一个类似的问题,但它只会在打开Android Studio后发生一次。但是我所要做的就是尝试再次运行测试。然后它就可以运行并继续运行,直到我必须重新启动Android Studio。某些地方不对,但这种烦恼很小,以至于我迄今为止都忽略了它。 - Brian Reinhold
13个回答

85

我之前也遇到了类似的问题,原因是我首先使用相同的类名创建了一个单元测试。当我创建仪器化单元测试时出现错误。

要解决这个问题,我进入“Edit Configurations”,运行图标左侧。然后在Unit Test下方找到了'conflicting'类,把它删除了。点击应用/确定。接着我右键点击类名,点击运行,嗯,就这样,它可以正常工作了。


3
我的情况是由于我在某个时间点切换到了一个发布版本的编译配置,该配置具有不同的应用程序ID。尽管我切换回了调试配置,但Android Studio仍然试图将发布应用程序ID用于测试。 - aaronvargas
1
当这种情况发生时,我会按照上述方法删除AS中的所有运行配置,然后再尝试一次。很可能是因为我对测试类进行了一些更改,或者切换到了一个测试类存在差异的分支。 - tricknology
1
谢谢!我花了很多时间来理解发生了什么。我还遇到了发布和调试之间的问题。 - Laurent D.
1
谢谢,这正是我的问题。 - 1800 INFORMATION

24

Android Studio的解决方法如下:

  • 步骤1. 进入运行/调试配置
  • 步骤2. 进入Android测试部分
  • 步骤3. 删除测试配置文件(-)
  • 步骤4. 点击应用并确认
  • 步骤5. 再次运行测试

2
谢谢,这个方法可行,看起来是 Android Studio 的一个 bug。我还得把我的测试从“单元测试”部分中移除,因为由于某些模糊的原因错误地注册在那里了。 - Kurovsky

16

我刚遇到了这个问题 - 在Kotlin中编写我的单元测试。在我的情况下,结果发现我忘记在给定模块的build.gradle文件中添加kotlin插件:

apply plugin: 'kotlin-android'

15
我曾遇到相同的问题。我发现被测试的方法在Run/Debug配置下拉框中显示为:
TestClassName.testMethod()
而不是正确的:
testMethod()

我通过删除给出此错误的测试方法的TestClass.testMethod() Run/Debug配置,然后重新运行测试来解决这个问题。
如果这重现了相同的问题,请删除错误的Run/Debug配置,然后右键单击测试方法并选择:
Create 'testMethod()'...
(而不是Run或Debug)来创建一个可用的配置。

1
糟糕!两年过去了,这个黑客仍然有用。 - Giszmo

5

我曾经遇到过这个问题,但是在这篇文章中给出的所有答案(以及其他Stack Overflow上备受关注的帖子)都不能解决我的问题。
然而,手动运行gradle任务compileTestKotlin似乎解决了我的问题。

这是针对Kotlin测试,Android Studio 3.1.2的情况。


3
如果您正在团队中工作,请检查所有的build.gradle文件,确保没有人禁用测试任务。我遇到了“空测试套件”的错误,最终发现是在项目根目录下的build.gradle中出现了以下情况所致:
gradle.taskGraph.whenReady {
    tasks.each { task ->
        if (task.name.contains("Test"))
        {
            task.enabled = false
        }
    }
}

2
如果您使用Robolectric,您可能需要在运行配置中设置工作目录为$MODULE_DIR$。同时,还需设置VM选项:-ea或者-noverify。
参考链接:http://robolectric.org/getting-started/

0

在AS 3.3中发生了这种情况。

我正在使用Flavors,并且这发生在一个仅具有src/mainsrc/test的模块中。应用程序模块有src/main src/commonsrc/flavor。在AS中选择的构建类型是flavorDebug

要修复它,我转到“运行配置”并在“使用模块的类路径”下拉菜单中选择了应用程序模块。选择要测试的模块,就完成了!


0

我的工作:

  • 构建 > 清理项目
  • 运行测试

0
在我的情况下,这是由于@BeforeClass方法中抛出异常所致。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接