在 Android Studio 中运行所有单元测试

Posted

技术标签:

【中文标题】在 Android Studio 中运行所有单元测试【英文标题】:Run all unit tests in Android Studio 【发布时间】:2017-04-28 06:12:00 【问题描述】:

我在 android Studio 中有这个项目:

我希望一键运行所有项目中的所有单元测试。

我该怎么做?

【问题讨论】:

到目前为止的所有答案都提供了一个选项,但不要使用 Android Studio 测试运行器(它允许您跳转到源代码、快速查看测试结果等)。为了使用这些功能,您只需创建一个针对整个项目测试的新运行配置。我在下面的回答中详细说明了这些步骤:***.com/a/56192783/2441420 【参考方案1】:

不确定这是在哪个版本的 Android Studio 中添加的,但我使用的是 Android Studio 3.4

在项目浏览器窗口中,选择项目视图

右键单击您的根项目并选择“创建‘所有测试’...”

...将出现此窗口(这些默认值需要更改)

更改以下选项:

搜索测试:

在整个项目中

JRE:

您在此菜单中可用的最新版本的 Android API __ 平台(对我来说,Android API 28 平台

点击应用

从下拉菜单中选择“所有测试”

查看所有测试的输出

【讨论】:

最后——这实际上是您在签入代码之前应该做的最常见的事情!如果不清楚,也可以通过“运行/调试”下拉组合中的“编辑配置...”选项来完成。我不必更改默认的 JRE。我希望 Android Instrumented Tests 有类似的东西,但它们必须基于每个模块创建,因为它们似乎不支持在整个项目中搜索测试。 嗨,我正在尝试通过命令行运行单元测试(对于我的 CI 服务器),它始终适用于 Android Studio,但不适用于命令行,因为它总是提供 java.util. lang.ClassNotFoundException 错误。一段时间后,我了解到有一些不同的东西。当我从 AS 运行测试时,它说 Executing tasks: [:lib_view:generateDebugSources, ...] 似乎 ./gradlew test 跳过 generateDebugSources 任务所以它找不到类,你知道 AS 运行什么命令当我们点击运行测试? 这似乎只适用于单元测试。 androidTests 呢? 这确实应该作为默认配置内置。 ?【参考方案2】:

首先,您可以列出项目中所有可用的测试任务

./gradlew tasks

然后您可以选择要执行的任务。如果你想为所有风格和所有 buildTypes 执行所有测试,你只需要运行

./gradlew test connectedAndroidTest

如果不想每次运行测试时都记住所有的 gradle test 命令,可以创建一个文件“custom_tasks.gradle”并添加

task testAll(dependsOn: ['test', 'connectedAndroidTest']) 
   group = 'custom_tasks'
   description = "Run all tests"

然后,你只需要运行

./gradlew testAll

【讨论】:

我刚刚将任务添加到我的应用程序的 gradle 文件并将组行更改为group = 'Verification',感谢您的建议! 但是问题是关于android studio的,他特别提到了一键也很明显,我也是因为它。但是这个答案是通过 gradle 从命令行运行的。更好的答案是,不,使用 android studio test runner 是不可能的。 @Renetik testAll 任务将出现在 Android Studio 的 Gradle 对话框中,您可以在其中“双击”它来运行它!两次点击,我知道,但我们可以让那一张幻灯片不是吗? @Renetik 可以使用 Android Studio 测试运行器运行测试。简而言之,您必须创建一个针对所有项目测试的运行配置。详情请看我的回答:***.com/a/56192783/2441420 developer.android.com/studio/test/command-line【参考方案3】:
    在“项目”面板中(CMD+1 显示)右键单击“java”。 点击“在 Java 中运行测试”

【讨论】:

这也忽略了一些测试 这仅在该目录中运行测试。 OP 正在询问项目中的所有测试目录 这不再可用 从 AS 3.3.2 开始,这对我有效,单击 2 次即可运行我的所有测试,一个在 androidTest/java 上,另一个在 src/test/java @IgorGanapolsky 从 Android Studio 3.4 开始。诀窍是为项目中的所有测试创建另一个运行配置。有关详细信息,请参阅我的答案:***.com/a/56192783/2441420【参考方案4】:

使用 AndroidStudio ArcticFox 的方法如下:

在运行配置下的工具栏中选择“编辑配置”

选择 (+) 添加新配置并选择 Gradle:

在配置页面上:

为配置指定一个名称(运行所有单元测试) 选择您的根项目作为 Gradle 项目 添加 Tasks cleanTestDebugUnitTest testDebugUnitTest(您可以从现有配置中复制它以进行单元测试,但请确保删除模块前缀(例如 :app:)) 将 --tests "*" 添加为 Arguments(显然是告诉 AS 将结果显示为 TestResults)

选择并运行您的新配置。结果将显示在运行窗口中:

【讨论】:

cleanTestDebugUnitTest 是干什么用的? @mikeD cleanTestDebugUnitTest 据我所知,首先用于清理构建。它通常由 AS 在您手动运行的每个单元测试配置中添加。 (我经常删除它以节省一些时间)【参考方案5】:

你可以尝试在安卓终端上使用这个命令行: 麦克:

./gradlew test connectedAndroidTest

窗户:

gradlew test connectedAndroidTest

【讨论】:

以上是关于在 Android Studio 中运行所有单元测试的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio - Junit 4 - 在所有测试之前运行代码

在 Android Studio 中运行参数化单元测试时,未找到给定的测试包括错误

Android Studio导入现有单元测试“无法找到仪器信息”

如何使用 Android Studio 运行单元测试

Android Studio中进行单元测试

在 Android Studio 中运行检测测试而不模拟用户操作