2014-05-09 14 views
8

Ho un semplice progetto HelloWorld per Android (costruito in Eclipse IDE), sono in grado di eseguire "gradle build" correttamente nel prompt cmd per questo progetto.Scrittura dello script Gradle per eseguire test case unit per il progetto Test di Eclipse Android

Inoltre, ho scritto un semplice progetto di test di JUnit per Android e funziona perfettamente con Eclipse.

Ora voglio eseguire questo Test Project o Unit Test Cases (se la mia comprensione è sbagliata!) Utilizzando lo script Gradle. Come faccio?

Di seguito è riportato il file build.gradle che sto utilizzando. Voglio sapere come scrivere codice script per automatizzare l'esecuzione del test case.

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' è stato rinominato in' androidTest', vedere Cronologia per https://github.com/Nodeclipse/nodeclipse-1/blob/master/org.nodeclipse.enide .editors.gradle/docs/android/build.gradle –

risposta

0

Ecco quello che io uso:

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' 
} 

Esegui il test:

gradlew unitTest 
+0

La domanda riguarda Eclipse ADT (con le classiche cartelle di origine) e Come eseguire Android Test Project (creato in Eclipse) –

+0

Anche se ho votato, ma ho comunque dato la taglia come migliore risposta (non posso giudicare per conto mio) –

0

Questa soluzione non è ancora implementata e testati. Lavori in corso, i commenti sono benvenuti.

Dopo aver letto tutto user guide con attenzione, è chiaro che non v'è alcun sostegno diretto ai progetti Eclipse prova Android. La ragione è che il nuovo sistema di build adotta lo stile Gradle (e Maven) per avere un test unitario all'interno di un modulo/progetto.

Ma perché i progetti Eclipse prova Android è ancora progetto Android, non c'è modo di provare

  1. Aggiungi build.gradle vedi sotto Eclipse progetto Android di prova.
    Esso dovrebbe avere compile project(':app') in 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. Perché app e la sua prova oggi fanno progetti multi-modulo aggiungere settings.gradle. Il modo più semplice per dirla 1 livello inferiore (cartella in cui sia di progetto sono)

    include ':app' 
    include ':apptest' 
    

    altro modo è quello di mettere nella cartella di pari livello, ad esempio, chiamato parent

    includeFlat 'app' 
    includeFlat 'apptest' 
    

    Nel caso in cui in seguito si avrebbe bisogno di correre costruire da quella cartella (o specificare ogni volta settings.gradle posizione con -cCLI option

UPDATE Facendo una ricerca sulla test JUnit puri con Gradle (un po ' offtopic per questa domanda), sembra che il team di Tooling Android trascuri questa domanda, rompendo ciò che altri sviluppatori stanno tentando di fare con il nuovo plugin Android Gradle. Anche in Android Studio non è così nemmeno How can I create tests in Android Studio?. L'unica orgnizzazione che interessa è il contributo di Robolectric i butori che hanno il framework pronto per il test JUnit puro https://github.com/robolectric/gradle-android-test-plugin

Problemi correlati