2014-05-09 63 views
8

我有一个简单的HelloWorld Android项目(内置于Eclipse IDE中),我可以在此项目的cmd提示符下成功执行“gradle build”。编写Gradle脚本为Eclipse运行单元测试用例Android测试项目

另外我也为它编写了一个简单的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') 
    } 
} 
+0

'instrumentTest'重命名为'androidTest',请参阅https://github.com/Nodeclipse/nodeclipse-1/blob/master/org.nodeclipse.enide的历史记录.editors.gradle /文档/安卓/编译。gradle –

回答

0

这里是我使用:

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 
+0

问题是有关Eclipse ADT(带有经典源文件夹)以及如何运行Android Test项目(在Eclipse中创建) –

+0

尽管我投了弃权票,但仍然给予赏金作为最佳答案(不能为我自己判断) –

0

该解决方案还没有实现和测试。正在进行中,欢迎评论。

仔细阅读所有user guide之后,显然没有Eclipse Eclipse项目的直接支持。原因在于新建系统采用Gradle(和Maven)风格在模块/项目中进行单元测试。

但因为Eclipse的Android测试项目仍是Android项目,有方式来尝试

  1. 添加build.gradle见下文到Eclipse的Android测试项目。
    它应该有compile project(':app')dependencies

    /*  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' 
    

    在后一种情况下,你将需要运行该文件夹中建立(或每次用-cCLI option

更新关于与gradle这个纯JUnit测试做研究指定settings.gradle位置(位对于这个问题而言,这似乎就像Android Tooling团队忽略了这个问题,打破了其他开发者正在试图用新的Android gradle插件做的事情,甚至在Android Studio中也不是如此,即使是在How can I create tests in Android Studio?之间。其框架已准备好进行纯JUnit测试的butors https://github.com/robolectric/gradle-android-test-plugin