webentwicklung-frage-antwort-db.com.de

Verwirrt über testCompile und androidTestCompile in Android Gradle

Ich bin neu in der Testwelt und noch mehr in der Android-Testwelt. Bei der Erforschung von Robolectric, die bei Tests mit Android hilfreich ist, verwirrt mich eine Sache am meisten. Manchmal sehe ich im Web Leute, die das testCompile-Schlüsselwort in Abhängigkeit vom Gradle-Build-Skript verwenden, wenn sie auf Robolectric verweisen, während andere androidTestCompile verwenden. Sicherlich können beide nicht gültig sein.

Kann jemand den Unterschied zwischen den beiden erklären und welche davon sollten bei der Verwendung von Robolectric verwendet werden?

86
Lucas

Einfach testCompile ist die Konfiguration für Komponententests (die in src/test) und androidTestCompile für die Test-API (in src/androidTest). Da Sie beabsichtigen, Komponententests zu schreiben, sollten Sie testCompile verwenden.

Update: Der Hauptunterschied zwischen den beiden ist, dass die test-Quellgruppe in einer regulären Java-JVM ausgeführt wird, während die androidTest-Quellensatztests auf einem Android-Gerät (oder einem Emulator) ausgeführt werden.

118
Mark Vieira

Um Ihre Frage zu beantworten: Verwenden Sie testCompile für Robolectric

warum, weil robolectric auf der JVM läuft und das gesamte Verhalten von Android-Geräten simuliert. 

testCompile und androidTestCompile sind "nach Konvention" Android-Ordner, die beim Ausführen von Aufgaben, die vom Android-Plugin bereitgestellt werden, verwendet werden.

androidTestDebug wählt Tests aus dem Ordner androidTest, testDebug wählt Tests aus dem Testordner,

Auch hier handelt es sich nur um herkömmliche Ordner, in denen Sie Quellensätze für diese Konfigurationen angeben können

Hinweis: Espresso ist so eine großartige Bibliothek, die versucht, sich von robolectric zu entfernen :)

3
Amit Kaushik

// Prüfung von Einheiten

testCompile 'junit:junit:4.12'

Der obige Code ist eine Abhängigkeit von JUnit 4 in der build.gradle-Datei in Android Studio .. __ Sie sehen, dass es testCompile hat, weil JUnit auf JVM ausgeführt wird und kein Gerät oder Emulator zur Ausführung benötigt. Das bedeutet auch, dass für JUnit-Tests der Anwendungskontext nicht ausgeführt werden muss, und wenn dies erforderlich ist, müssen wir sie "MOCKEN".

// Insturmentierte Unit-Tests

androidTestCompile('com.Android.support.test:runner:0.5', {
        exclude group: 'com.Android.support', module: 'support-annotations'
    })

Jetzt sehen wir hier androidTestCompile, da wir dieses Mal beabsichtigen, das Gerät oder den Emulator für Tests zu verwenden, dh für Instrumentationstests. Zur besseren Klarstellung würde ich vorschlagen, von developer.Android.com zu lesen

1
Lazycoder_007

Um Abhängigkeiten für JVM-Tests oder Unit-Tests hinzuzufügen (Tests, die nur auf Java-Umgebungen basieren, benötigen keine Android-Umgebung).

Wir verwenden die Direktive testCompile. Beispiel: 

dependencies {
    testCompile gradleTestKit()
}

Um die Abhängigkeit für Instrumentationstests hinzuzufügen (die Tests basieren hauptsächlich auf der Android-Umgebung), verwenden wir die Anweisung androidTestCompile.

0
Subhasish Nath