【问题标题】:Can Gradle build Instrumentation tests without running them?Gradle 可以在不运行它们的情况下构建 Instrumentation 测试吗?
【发布时间】:2018-05-24 14:05:32
【问题描述】:

TL:DR 我正在寻找一种方法来确保我们的 Instrumentation 测试套件可以编译,但无需实际运行它。是否可以使用Gradle的Android插件来实现?

我查看了official documentation,除了编译然后一起运行测试的 Gradle 命令之外,我没有看到任何其他内容。

我正在寻找这个的原因是我们希望能够在每个 Pull Request 上运行构建,但运行套件需要太长时间。然而,我们希望确保检测套件至少可以编译所有代码更改,以便它能够及时运行。

感谢您的帮助

【问题讨论】:

    标签: android android-gradle-plugin android-testing gradlew


    【解决方案1】:

    可以实现,gradle是把一切都作为task运行,希望你在执行:

    ./gradlew test
    

    你可以看到输出为

    Incremental java compilation is an incubating feature.
    :app:preBuild UP-TO-DATE
    :app:preDebugBuild UP-TO-DATE
    :app:checkDebugManifest
    :app:preReleaseBuild UP-TO-DATE
    :app:prepareComAndroidSupportAnimatedVectorDrawable2501Library
    :app:prepareComAndroidSupportAppcompatV72501Library
    :app:prepareComAndroidSupportDesign2501Library
    :app:prepareComAndroidSupportRecyclerviewV72501Library
    :app:prepareComAndroidSupportSupportCompat2501Library
    :app:prepareComAndroidSupportSupportCoreUi2501Library
    :app:prepareComAndroidSupportSupportCoreUtils2501Library
    :app:prepareComAndroidSupportSupportFragment2501Library
    :app:prepareComAndroidSupportSupportMediaCompat2501Library
    :app:prepareComAndroidSupportSupportV42501Library
    :app:prepareComAndroidSupportSupportVectorDrawable2501Library
    :app:prepareComAndroidSupportTransition2501Library
    :app:prepareDebugDependencies
    :app:compileDebugAidl
    :app:compileDebugRenderscript
    :app:generateDebugBuildConfig
    :app:generateDebugResValues
    :app:generateDebugResources
    :app:mergeDebugResources
    :app:processDebugManifest
    :app:processDebugResources
    :app:generateDebugSources
    :app:incrementalDebugJavaCompilationSafeguard
    :app:compileDebugJavaWithJavac
    :app:compileDebugJavaWithJavac - is not incremental (e.g. outputs have changed, no previous execution, etc.).
    :app:incrementalDebugUnitTestJavaCompilationSafeguard UP-TO-DATE
    :app:preDebugUnitTestBuild UP-TO-DATE
    :app:prepareDebugUnitTestDependencies
    :app:compileDebugUnitTestJavaWithJavac
    :app:processDebugJavaRes UP-TO-DATE
    :app:processDebugUnitTestJavaRes UP-TO-DATE
    :app:compileDebugUnitTestSources
    :app:mockableAndroidJar
    :app:assembleDebugUnitTest
    :app:testDebugUnitTest
    :app:checkReleaseManifest
    :app:prepareReleaseDependencies
    :app:compileReleaseAidl
    :app:compileReleaseRenderscript
    :app:generateReleaseBuildConfig
    :app:generateReleaseResValues
    :app:generateReleaseResources
    :app:mergeReleaseResources
    :app:processReleaseManifest
    :app:processReleaseResources
    :app:generateReleaseSources
    :app:incrementalReleaseJavaCompilationSafeguard
    :app:compileReleaseJavaWithJavac
    :app:compileReleaseJavaWithJavac - is not incremental (e.g. outputs have changed, no previous execution, etc.).
    :app:incrementalReleaseUnitTestJavaCompilationSafeguard UP-TO-DATE
    :app:preReleaseUnitTestBuild UP-TO-DATE
    :app:prepareReleaseUnitTestDependencies
    :app:compileReleaseUnitTestJavaWithJavac
    :app:processReleaseJavaRes UP-TO-DATE
    :app:processReleaseUnitTestJavaRes UP-TO-DATE
    :app:compileReleaseUnitTestSources
    :app:assembleReleaseUnitTest
    :app:testReleaseUnitTest
    :app:test
    
    BUILD SUCCESSFUL
    

    这是任务调用层次结构,意味着任务“test”依赖于所有或一个以上任务,即“app:testReleaseUnitTest”。所以你可以调用“assembleReleaseUnitTest”

    ./gradlew assembleReleaseUnitTest 
    

    【讨论】:

    • 您的答案可能适用于单元测试;但是,对于仪器测试任务是不同的。不过,请务必查找 Gradle 任务列表!
    【解决方案2】:

    找到了Gradle 任务来实现这一点:

    $ ./gradlew compileDebugAndroidTestJavaWithJavac

    上面的任务将编译 Instrumented 测试而不实际运行它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-25
      • 1970-01-01
      • 2010-12-09
      • 2017-09-24
      • 1970-01-01
      • 2013-04-28
      相关资源
      最近更新 更多