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

时间:2015-08-12 20:45:33

标签: android unit-testing gradle

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

  1. 右键单击包含单元测试的文件(Gradle-Aware Make)。
  2. testAppDebugUnitTest任务来自可用的Gradle任务列表。
  3. 第一个实际上包含两个任务: - :app:assembleAppDebug:app:assembleAppDebugUnitTest

    第二个只是testAppDebugUnitTest本身。

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

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

    那么,差异是什么呢?如果在实际的单元测试运行之前准备好所有东西需要两倍的时间,那么为什么它是推荐的方式?

2 个答案:

答案 0 :(得分:13)

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

  

与第二次相比,它需要两倍的时间。

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

为避免这段时间在Android工作室中进行处理,您需要 Speed up Gradle build time 。它肯定会有所作为

以下是加快Gradle构建时间>>

的几个步骤
  • 在编译器设置中(Android Studio - >偏好设置 - >项目 设置[您的项目] - >编译器(基于Gradle的Android项目)), 在"命令行选项中键入--offline"框。

    从约4分钟到约20秒。

enter image description here

  • 另一种方法是,如果告诉Gradle使用守护进程构建,可以减少Gradle的启动时间(在我的计算机上减少到两秒)。只需在以下目录中创建名为gradle.properties的文件:
    • /home/<username>/.gradle/(Linux)
    • /Users/<username>/.gradle/(Mac)
    • C:\Users\<username>\.gradle(Windows)

将此行添加到文件中:

org.gradle.daemon=true

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

注意:如果你没有使用Gradle构建任何东西一段时间(目前是3个小时),它将停止守护进程,这样你将在下一个时间内体验到很长的启动时间建立。

有关详细信息,请参阅此Building and running app via Gradle and Android Studio is slower than via Eclipse

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

n g +与开发者有关于它的discussion

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

答案 1 :(得分:4)

你的选项1花费两倍时间的原因是因为大部分时间都浪费在旋转Gradle并检查任务是否是最新的。所以运行无操作组合会使它长两倍。您可以通过自己运行来验证这一点,并通过执行no-op来检查浪费的时间。

使用gradle,使用&#34; - offline - daemon --parallel&#34;可以让你到达某个地方(当您对Maven / JCenter repos的访问速度较慢时,离线功能非常有用,守护程序有助于保持文件缓存,并且如果您启用MultiDex并将应用程序拆分为小模块,则并行特别有用)

如果您只是询问&#34;什么是在Android中运行单元测试的最快方式?&#34;如果不考虑你需要的改变,我建议切换到Buck(https://buckbuild.com/),这比dex-xing和旋转测试快10倍,但AS支持有限。