2014-05-09 3 views
8

Ich habe ein einfaches HelloWorld Android-Projekt (in Eclipse IDE gebaut), ich bin in der Lage, "Gradle Build" erfolgreich in cmd Prompt für dieses Projekt zu tun.Schreiben Gradle Skript zum Ausführen von Einheit Testfälle für Eclipse Android Test-Projekt

Auch ich habe ein einfaches JUnit Android Test-Projekt dafür geschrieben, und es läuft gut in Eclipse.

Jetzt möchte ich dieses Testprojekt oder Unit Test Cases (wenn mein Verständnis falsch ist!) Mit Gradle Skript ausführen. Wie mache ich das?

Folgendes ist die build.gradle-Datei, die ich verwende. Ich möchte wissen, wie man Skriptcode schreibt, um die Testfallausführung zu automatisieren.

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' wurde umbenannt in' androidTest', siehe Verlauf für https://github.com/Nodeclipse/nodeclipse-1/blob/master/org.nodclipse.enide .editors.gradle/docs/android/build.grandle –

Antwort

0

Hier ist, was ich benutze:

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

Ihren Probelauf:

gradlew unitTest 
+0

Die Frage ist über Eclipse ADT (mit klassischen Quellordner) und Wie Android Test-Projekt (in Eclipse) ausgeführt –

+0

Obwohl ich abgelehnt, aber immer noch Kopfgeld als die beste Antwort (kann nicht für meine eigenen beurteilen) –

0

Diese Lösung ist noch nicht implementiert und getestet. Work in progress, Kommentare sind willkommen.

Nachdem Sie alle user guide sorgfältig gelesen haben, ist es klar, dass es keine direkte Unterstützung für Eclipse Android Test-Projekte gibt. Der Grund dafür ist, dass das neue Build-System den Gradle (und Maven) -Stil anwendet, um einen Unit-Test innerhalb des Moduls/Projekts zu haben.

Aber weil Eclipse-Projekte Android-Test ist noch Android-Projekt gibt Weg

  1. hinzufügen build.gradle siehe unten, zu versuchen, Android-Test-Projekt Eclipse.
    Es sollte 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. hat Weil App und sein Test jetzt Multi-Modul-Projekt settings.gradle hinzufügen machen. Der einfachste Weg, um es 1 Ebene nach unten (Ordner, in dem beide Projekt sind)

    include ':app' 
    include ':apptest' 
    

    andere Weg ist, in Geschwister-Ordner zu setzen, zum Beispiel genannt parent

    includeFlat 'app' 
    includeFlat 'apptest' 
    

    Im letzteren Fall würden Sie aus diesem Ordner erstellen ausgeführt werden müssen (oder bei jedem settings.gradle Standort angeben mit -cCLI option

UPDATE mit gradle Forschung über reine JUnit-Tests tun (ein bisschen (offtopic für diese Frage), es scheint wie Android Tooling Team diese Frage zu übersehen, was andere Entwickler versuchen, mit neueren Android Gradle Plugin zu tun. Selbst in Android Studio ist es nicht so selbst How can I create tests in Android Studio?. Die einzige Organisation, die sich interessiert, ist Robolectric contri Butors, die ihr Framework für reine JUnit-Tests bereit haben https://github.com/robolectric/gradle-android-test-plugin

Verwandte Themen