繁体   English   中英

编写Gradle脚本以运行Eclipse Android Test项目的单元测试用例

[英]Writing Gradle script to run unit test cases for Eclipse Android Test project

我有一个简单的HelloWorld Android项目(在Eclipse IDE中构建),我能够在此项目的cmd提示符下成功完成“渐变构建”。

我也为此编写了一个简单的JUnit Android测试项目,它在Eclipse中运行良好。

现在,我想使用Gradle脚本运行该测试项目或单元测试用例(如果我的理解是错误的!)。 我怎么做?

以下是我正在使用的build.gradle文件。 我想知道如何编写脚本代码来自动执行测试用例。

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.10.+'
    }
}
apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.3"

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
        test {
            java.srcDirs = ['src/test/java']
            resources.srcDirs = ['src/test/resources']         
        }

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')
        androidTest.setRoot('tests')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}

这是我使用的:

android {
    // ...
    // your stuff
    // ...

    // So Android Studio can nicely edit the test files
    sourceSets {
        androidTest {
            java.srcDir file('src/test/java')
        }
    }
}

// <Task to run tests>
sourceSets {
    unitTest {
        java.srcDir file('src/test/java')
    }
}

configurations {
    unitTestCompile.extendsFrom runtime
    unitTestRuntime.extendsFrom unitTestCompile
}

task unitTest(type: Test, dependsOn: assemble) {
    description = "run unit tests"
    testClassesDir = project.sourceSets.unitTest.output.classesDir
    classpath = project.sourceSets.unitTest.runtimeClasspath
}

check.dependsOn unitTest
// </Task to run tests>

dependencies {
    // ...
    // compile stuff
    // ....

    unitTestCompile files("$project.buildDir/classes/release")
    unitTestCompile 'junit:junit:4.11'
 }

运行测试:

gradlew unitTest

该解决方案尚未实施和测试。 工作正在进行中,欢迎发表评论。

仔细阅读所有用户指南后 ,很明显没有对Eclipse Android Test项目的直接支持。 原因是新的构建系统采用Gradle(和Maven)样式在模块/项目中进行了单元测试。

但是由于Eclipse Android Test项目仍然是Android项目,因此可以尝试

  1. build.gradle添加到Eclipse Android Test项目。
    它应该在dependencies具有compile project(':app')

     /* Android * http://www.nodeclipse.org/projects/gradle * Nodeclipse/Enide build.gradle template for classic Android project * https://github.com/Nodeclipse/nodeclipse-1/blob/master/org.nodeclipse.enide.editors.gradle/docs/android/build.gradle * Gradle Plugin User Guide: * http://tools.android.com/tech-docs/new-build-system/user-guide * Usage * 1. put in project root * 2. check version numbers * 3. use from command line or with Gradle for Android http://marketplace.eclipse.org/content/gradle * Support for this template * https://github.com/nodeclipse/nodeclipse-1/issues/ * History * 2014-03-13 android plugin updated to 0.9, see http://tools.android.com/tech-docs/new-build-system/migrating_to_09 * 2014-04-01 check for gradle version * 2014-04-10 wrapper and runAndroidApplication tasks * 2014-04-25 rename to run, add << * 2014-05-23 defaut plugin version 0.10.x * 2014-06-06 show "boilerplate part" * @author Paul Verest */ println GradleVersion.current().prettyPrint() assert gradle.gradleVersion >= "1.10" // android plugin 0.10 requires Gradle 1.10, 1.11, 1.12 // after `gradle wrapper` it is possible to use './gradlew build' with Gradle version specified task wrapper(type: Wrapper) { gradleVersion = '1.12' } //{ "boilerplate part" buildscript { repositories { mavenCentral() //jcenter() } dependencies { classpath 'com.android.tools.build:gradle:0.10.+' } } apply plugin: 'android' dependencies { compile fileTree(dir: 'libs', include: '*.jar') //androidTestCompile 'com.jayway.android.robotium:robotium-solo:4.3.1' // for multi-module project build (needs `settings.gradle`): // reference needed modules or App under test (for Eclipse Android Test project) compile project(':app') } android { compileSdkVersion 19 buildToolsVersion "19.0.3" sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } // Move the tests to tests/java, tests/res, etc... androidTest.setRoot('tests') // Move the build types to build-types/<type> // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... // This moves them out of them default location under src/<type>/... which would // conflict with src/ being used by the main source set. // Adding new build types or product flavors should be accompanied // by a similar customization. debug.setRoot('build-types/debug') release.setRoot('build-types/release') } } //} "boilerplate part" 
  2. 因为app及其测试现在使多模块项目添加settings.gradle 将其放低1级(两个项目所在的文件夹)的最简单方法

     include ':app' include ':apptest' 

    其他方法是放入同级文件夹,例如称为parent

     includeFlat 'app' includeFlat 'apptest' 

    在以后的情况下,您将需要从该文件夹运行构建(或每次使用-c CLI选项指定settings.gradle位置)

更新进行有关gradle的纯JUnit测试的研究(此问题有点偏离主题),似乎Android Tooling团队忽略了这个问题,打破了其他开发人员正在尝试使用较新的android gradle插件进行的工作。 即使在Android Studio中也是如此,该如何在Android Studio中创建测试? 唯一关心的组织是Robolectric贡献者,他们的框架已准备好用于纯JUnit测试https://github.com/robolectric/gradle-android-test-plugin

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM