web-dev-qa-db-fra.com

Confus à propos de testCompile et androidTestCompile dans Android Gradle

Je suis nouveau dans le monde des tests et encore plus dans le monde des tests Android. Tout en faisant des recherches sur Robolectric qui facilitent les tests sur Android, une chose me déroute le plus. Parfois, sur le Web, je vois des personnes utiliser le mot clé testCompile dans des dépendances du script de construction de gradle lors de la référence à Robolectric alors que d'autres utilisent androidTestCompile. Les deux ne peuvent certainement pas être valables?

Quelqu'un peut-il expliquer la différence entre les deux et lequel d'entre eux devrait être celui utilisé lors de l'utilisation de Robolectric?

86
Lucas

Simplement testCompile est la configuration pour les tests unitaires (ceux situés dans src/test) et androidTestCompile est utilisé pour l’application de test (celle située dans src/androidTest). Puisque vous avez l'intention d'écrire des tests unitaires, vous devez utiliser testCompile.

Mise à jour: La principale distinction entre les deux est que le groupe de sources test s'exécute dans une machine virtuelle Java, alors que les tests du groupe de sources androidTest s'exécutent sur un périphérique Android (ou un émulateur).

118
Mark Vieira

Pour répondre à votre question - utilisez testCompile pour robolectric

pourquoi, parce que robolectric s'exécute sur la machine virtuelle Java, se moquant de tout le comportement du périphérique Android. 

testCompile et androidTestCompile sont des dossiers Android "par convention" que Gradle utilise lors de l'exécution de tâches fournies par le plugin Android.

androidTestDebug choisit des tests dans le dossier androidTest, testDebug choisit des tests dans le dossier test,

Encore une fois, ce ne sont que des dossiers de convention que vous pouvez donner aux ensembles de sources pour ces configurations.

Note: l'espresso est une bibliothèque tellement géniale, essayez de vous éloigner de robolectric :)

3
Amit Kaushik

// tests unitaires

testCompile 'junit:junit:4.12'

Le code ci-dessus est une dépendance de JUnit 4 dans le fichier build.gradle du studio Android . Il s’agit d’un testCompile, car JUnit s’exécute sur la JVM et ne nécessite aucun périphérique ni émulateur. Cela signifie également que les tests JUnit ne nécessiteront pas le contexte d'application pour s'exécuter et, le cas échéant, nous aurons besoin de les "simuler".

// Test unitaire insturmenté

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

Nous voyons maintenant androidTestCompile ici, car cette fois, nous avons l'intention d'utiliser le périphérique ou l'émulateur pour les tests, c'est-à-dire les tests d'instrumentation. Pour plus de précisions, je suggère de lire de développeur.Android.com

1
Lazycoder_007

Pour ajouter la dépendance pour les tests JVM ou les tests unitaires (les tests reposant uniquement sur l’environnement Java, nous n’avons besoin d’aucun environnement Android).

Nous utilisons la directive testCompile. Exemple: 

dependencies {
    testCompile gradleTestKit()
}

Pour ajouter le test de dépendance pour l'instrumentation (les tests reposant principalement sur l'environnement Android), nous utilisons la directive androidTestCompile.

0
Subhasish Nath