什么是在Android中运行单元测试的最快方法

Eug*_*ene 16 android unit-testing gradle

在Android Studio中运行单元测试有两个选项:

  1. 用您的单元测试右键单击该文件(即Gradle-Aware Make).
  2. testAppDebugUnitTest 任务来自可用的Gradle任务列表.

第一个实际上包含两个任务: - :app:assembleAppDebug:app:assembleAppDebugUnitTest

第二个就是它testAppDebugUnitTest自己.

第一个是Google工具团队推荐的方式,但与第二个相比需要两倍的时间.

除了持续时间之外,如何运行单元测试没有明显区别.您可能认为您的代码不会在没有编译的情况下进行编译assembleAppDebug,但事实并非如此 - 您在测试中引入任何类的更改或者按预期编译和执行的测试本身.

那么,有什么区别,为什么它是推荐的方式,如果在实际的单元测试运行之前需要两倍的时间来准备一切?

Kin*_*ses 13

我没有太多Gradle的工作经验,但是当然最好使用Google Team推荐的工具而不是其他工具.

与第二个相比,它需要两倍的时间.

如果您使用Android(或Android Studio)的新Gradle构建系统,您可能已经意识到,即使是最简单的Gradle调用(例如gradle项目或成绩任务)也非常慢.

为了避免这个时间在android studio中进行处理,你需要加快Gradle构建时间.它肯定会有所作为

以下是加快Gradle构建时间的几个步骤>>

  • 在编译器设置(Android Studio - >首选项 - >项目设置[您的项目] - >编译器(基于Gradle的Android项目))中,在"命令行选项"框中键入--offline.

    从约4分钟到约20秒.

在此输入图像描述

  • 换句话说,如果告诉Gradle使用守护进程来构建,可以减少Gradle的启动时间(在我的计算机上减少到两秒).只需在以下目录中创建名为gradle.properties的文件:
    • /home/<username>/.gradle/ (Linux)的
    • /Users/<username>/.gradle/ (苹果电脑)
    • C:\Users\<username>\.gradle (视窗)

将此行添加到文件中:

org.gradle.daemon=true
Run Code Online (Sandbox Code Playgroud)

从现在开始,Gradle将使用守护进程来构建,无论您是从命令行使用Gradle还是在Android Studio中构建.您还可以将gradle.properties文件放在项目的根目录中,并将其提交到SCM系统.但是你必须为每个项目做这件事(如果你想在每个项目中使用守护进程).

注意:如果您没有使用Gradle构建任何东西一段时间(目前为3小时),它将停止守护进程,这样您将在下一次构建时遇到很长的启动时间.

有关详细信息,请参阅此建筑和运行应用程序通过Gradle和Android Studio比通过Eclipse慢

绩效改进是2015年Gradle路线图(并进入2016年)的重要任务之一.所以希望,我们会看到这些年来总体表现有所增加.

体中+有一个讨论与关于它的开发者.

希望这些信息对您有所帮助.

  • 谢谢你这么全面的回答,不幸的是,这不是我所问过的. (3认同)

Edi*_*son 7

您的选项 1 花费两倍时间的原因是因为大部分时间都浪费在启动 Gradle 和检查任务是否最新上。因此,运行无操作汇编会使它的时间增加一倍。您可以通过自己运行来验证这一点,并检查执行无操作所浪费的时间。

使用 gradle,使用 "--offline --daemon --parallel" 运行可以让你到达某个地方(当你对 Maven/JCenter 存储库的互联网访问速度很慢时,离线很有用,守护进程有助于保持文件缓存,并行特别有用,如果您已启用 MultiDex 并将您的应用程序拆分为多个小模块)

如果您只是问“在 Android 中运行单元测试的最快方法是什么?” 不考虑您需要的更改,我建议切换到 Buck ( https://buckbuild.com/ ),它在 dex-xing 和旋转测试上比 Gradle 快 10 倍,但对 AS 的支持有限。