5

我正在使用来自 Jake Wharton 的出色插件进行 Android 单元测试。我不厌其烦地让这些单元测试运行的目的是为了速度(TDD 快速反馈等等)。

我已经设法正确配置它并运行一些示例测试,如下所示:

./gradlew test

每当我运行测试时,我都会注意到以下输出:

Relying on packaging to define the extension of the main artifact has been deprecated and is scheduled to be removed in Gradle 2.0
The Test.testReportDir property has been deprecated and is scheduled to be removed in Gradle 2.0. Please use the Test.getReports().getHtml().getDestination() property instead.
The TaskContainer.add() method has been deprecated and is scheduled to be removed in Gradle 2.0. Please use the create() method instead.
:mySampleApp:preBuild UP-TO-DATE
:mySampleApp:preDebugBuild UP-TO-DATE
:mySampleApp:preReleaseBuild UP-TO-DATE
:libraries:facebook:compileLint
:libraries:facebook:copyReleaseLint UP-TO-DATE
:libraries:facebook:mergeReleaseProguardFiles UP-TO-DATE
:libraries:facebook:packageReleaseAidl UP-TO-DATE
:libraries:facebook:preBuild UP-TO-DATE
:libraries:facebook:preReleaseBuild UP-TO-DATE
:libraries:facebook:prepareReleaseDependencies
:libraries:facebook:compileReleaseAidl UP-TO-DATE
:libraries:facebook:compileReleaseRenderscript UP-TO-DATE
:libraries:facebook:generateReleaseBuildConfig UP-TO-DATE
:libraries:facebook:mergeReleaseAssets UP-TO-DATE
:libraries:facebook:mergeReleaseResources UP-TO-DATE
:libraries:facebook:processReleaseManifest UP-TO-DATE
:libraries:facebook:processReleaseResources UP-TO-DATE
:libraries:facebook:generateReleaseSources UP-TO-DATE
:libraries:facebook:compileRelease UP-TO-DATE
:libraries:facebook:processReleaseJavaRes UP-TO-DATE
:libraries:facebook:packageReleaseJar UP-TO-DATE
:libraries:facebook:packageReleaseLocalJar UP-TO-DATE
:libraries:facebook:packageReleaseRenderscript UP-TO-DATE
:libraries:facebook:packageReleaseResources UP-TO-DATE
:libraries:facebook:bundleRelease UP-TO-DATE
:mySampleApp:prepareComAndroidSupportAppcompatV71800Library UP-TO-DATE
:mySampleApp:preparemySampleAppandroidLibrariesFacebookUnspecifiedLibrary UP-TO-DATE
:mySampleApp:prepareDebugDependencies
:mySampleApp:compileDebugAidl UP-TO-DATE
:mySampleApp:compileDebugRenderscript UP-TO-DATE
:mySampleApp:generateDebugBuildConfig UP-TO-DATE
:mySampleApp:mergeDebugAssets UP-TO-DATE
:mySampleApp:mergeDebugResources UP-TO-DATE
:mySampleApp:processDebugManifest UP-TO-DATE
:mySampleApp:processDebugResources UP-TO-DATE
:mySampleApp:generateDebugSources UP-TO-DATE

Gradle 似乎正在为我的项目加载所有依赖项。

我的样本测试如下:

package com.mycompany.mysampleapp;

import org.junit.Test;

import static org.fest.assertions.api.Assertions.assertThat;

public class AdditionOperationsTest {
  @Test public void testModulus() {
    assertThat(1).isEqualTo(1);
  }
}

这个测试实际上应该需要几分之一秒的时间来运行。我的理解是,项目依赖项的所有预加载都使其陷入困境。

在好的日子里,我会确保我在 CLASSPATH 中有我需要的东西,然后运行类似的东西:

javac src/test/java/main/java/com/micromobs/pkk/AdditionOperationsTest.java
java org.junit.runner.JUnitCore com.micromobs.pkk.AdditionOperationsTest

考虑到这是一个带有 gradle 的 Android 项目,我假设我必须做一些不同的事情,比如在 gradle 构建文件中创建特定任务,其中仅包括我的示例项目的测试文件,然后运行 ​​gradle 命令。 /gradlew 任务名称 ?

问题:是否可以在我的项目(com.mycompany.mysampleapp)的上下文中单独运行单个测试“AdditionOperationsTest”,这样它就不会加载外部项目依赖项

这是我的配置文件当前的样子:

# settings.gradle
include ':libraries:gradle-android-test-plugin'
include ':libraries:facebook', ':mysampleapp'

# build.gradle
...
apply plugin: 'android-test'

dependencies {
    testCompile 'junit:junit:4.10'
    testCompile 'org.robolectric:robolectric:2.1.+'
    testCompile 'com.squareup:fest-android:1.0.+'
}

# location of my test files:
androidproj/mysampleapp/src/test/java/main/com/mycompany/mysampleapp/AdditionOperationsTest.java
4

1 回答 1

4

-a 您应该可以通过使用命令行选项来做到这一点(不重建项目依赖项)。执行gradle -a test应该导致libraries:facebookmysampleapp项目不被重建。

编辑:如下所述,您可以通过使用Gradle daemon显着提高 Gradle 构建的性能。

于 2013-10-10T21:38:01.393 回答