2013-06-18 16 views
17

Ich bin neu zu Gradle und Android Studio, und ich versuche herauszufinden, wie Tests ausgeführt werden. Ich folgte den Anweisungen in http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Testing und ich bin in der Lage, Instrument Tests zu starten, aber nur /gradlew connectedInstrumentTest ausführen. Ich habe Probleme, die anderen check Aufgaben zu verstehen, die keinen Code in meiner App ausführen. Dies ist, was ./gradlew tasks printsGradle Android Test

... 
Verification tasks 
------------------ 
check - Runs all checks. 
connectedCheck - Runs all device checks on currently connected devices. 
connectedInstrumentTest - Installs and runs the tests for Build 'Debug' on connected devices. 
deviceCheck - Runs all device checks using Device Providers and Test Servers. 
... 

Wenn check läuft alle Prüfungen ... sollte es nicht die, die ich laufe aus connectedInstrumentTest bekommen?

Wie kann ich auch Tests ausführen, die die Android-Umgebung nicht benötigen? Soll ich sie unter/test/java platzieren? Wenn ja, welchen Befehl sollte ich ausführen, um sie auszuführen?

Tut mir leid, wenn diese Fragen sehr offensichtlich erscheinen, aber ich konnte in den Dokumenten keine Antwort auf diese Fragen finden.

Vielen Dank!

Edit:

Also habe ich hier einige Fortschritte gemacht haben. Es sieht aus wie check macht nichts. Es wäre (gerade jetzt) ​​der Entwickler, abhängige Aufgaben zu check hinzuzufügen, um einige JUnit-Tests auszuführen. Sie müssen eine Aufgabe erstellen, die Quellen suchen, sie kompilieren und ausführen.

connectedCheck und connectedInstrumentTest: Läuft InstrumentationTest im Gerät. (Das hat immer funktioniert).

deviceCheck: Dies ist nützlich, wie die Dokumentation sagt, für Continuos Integrationstests.

Antwort

1

überprüfen SOLLTE Instrumententests IIRC ausführen. Über das Ausführen von nicht Android Tests. Derzeit unterstützt das Android-Gradle-Plugin dies nicht. Ich habe jedoch ein Plugin erstellt, um JUnit-Tests mit Robolectric durchzuführen, so dass Sie keine Instrumentierungstests benötigen. Hier ist der Link: android-unit-test

5
  1. Wenn die Prüfung aller Prüfungen läuft ... sollte es nicht die, die ich laufe aus connectedInstrumentTest bekommen? Sie können den connectedInstrumentTest-Task als Abhängigkeit ausführen, um den Task zu überprüfen.

    check.dependsOn connectedInstrumentTest

  2. Wie kann ich Tests ausführen, die die Android-Umgebung nicht brauchen?

für Android-Projekte können wir diskutiert über 3 Arten von Tests

  1. JUnit-Test
  2. Robolectric Test
  3. Gerätetest

JUnit-Test

Wir können den einfachen Junit-Test nicht verwenden, um Android-bezogene Klassen zu überprüfen.Was wir tun können, ist die Trennung von Core-Java-Klassen in ein Java-Bibliotheksprojekt und das Hinzufügen dieser Abhängigkeit zum Android-Projekt.

Robolectric Test

Wir robolectric Test verwenden, um die Unit-Tests außerhalb des Emulator zu laufen. Dies macht die Tests schnell und einfach mit CI-Servern zu konfigurieren.

Um roboelektrischen Test zu verwenden, verwenden wir gradle-android-test-plugin Es beschreibt deutlich, wie dieses Plugin zu verwenden ist.

Projektstruktur

Wir haben Standard-Ordnerstruktur verwenden, um dieses Plugin zu verwenden. Wir müssen Ordner 'Test' zu halten robolectric Tests genannt verwenden:

MyProject/ 
    | settings.gradle 
    | build.gradle 
    - app/ 
     | build.gradle 
     -main 
      -java 
       -com.example.calculator  

     -test 
      -java 
       -com.example.calculator.robolectrictests 

Build-Datei ist

buildscript { 
    repositories { 
     mavenCentral() 
     maven { 
      url 'https://oss.sonatype.org/content/repositories/snapshots/' 
     } 
    } 
} 
dependencies { 
    classpath 'com.android.tools.build:gradle:0.6.+' 
    classpath 'com.squareup.gradle:gradle-android-test-plugin:0.9.1-SNAPSHOT' 
} 
apply plugin: 'android' 
apply plugin: 'android-test' 

repositories { 
    mavenCentral() 
} 
android { 
    compileSdkVersion 19 
    buildToolsVersion "19.0.0" 
    defaultConfig { 
     minSdkVersion 8 
     targetSdkVersion 19   
    } 
} 
dependencies { 
    compile 'com.android.support:appcompat-v7:+' 
    testCompile 'junit:junit:4.10' 
    testCompile 'org.robolectric:robolectric:2.1.+' 
    testCompile 'com.squareup:fest-android:1.0.+' 
} 

Dieser Test Aufgabe automatisch mit dem Scheck Task ausgeführt wird.

Gerätetest

Wie Sie erwähnt, erfordert dies die Android-Emulator. Das macht die Tests langsam, was bedeutet, dass sie keine gute Möglichkeit sind, TDD zu machen.

Wir robolectric Test als Unit-Tests in dem TDD-Verfahren verwenden. Instrumententest können wir als integrierten Test im TDD verwenden.

+4

Die gradle-android-Test-Plugin ist veraltet und Sie sollen es nicht verwenden mehr (es einfach nicht mit der neuesten Android gradle Plugin funktionieren) – tomrozb

+0

Das Plugin ** robolectric-gradle-Plugin umbenannt wurde ** und wird nun von dem Robolectric Team aufrechterhalten: https://github.com/robolectric/robolectric-gradle-plugin – friederbluemle