web-dev-qa-db-fra.com

Comment structurer le répertoire de test du projet dans Android Studio?

Il n'y a pas encore de convention pour cela, mais comment puis-je structurer le répertoire de test pour Android Studio, maintenant que ce qui est indiqué sur la page Android testing fundamentals diffère?

En particulier, tout pointeur sur la façon de faire fonctionner les tests jUnit sur Android Studio serait utile, merci.

De plus, l'utilisation de l'outil Android n'aide pas vraiment maintenant, car les choses sont un peu différentes avec Android Studio.

Mise à jour:

J'ai essayé de configurer le dossier de test et de l'exécuter, mais tout ce que je reçois est le suivant:

Running tests
Test running startedTest running failed: Unable to find instrumentation info for:ComponentInfo{<project-package-name>/Android.test.InstrumentationTestRunner}
Empty test suite.

J'ai également essayé d'ajouter un fichier AndroidManifest.xml standard pour les tests.

31
Jonathan Lin

[~ # ~] mise à jour [~ # ~]

À partir des outils de build 19.1.0 et du plugin de build 0.11.0 build Les fichiers .gradle doivent avoir testPackageName renommé en testApplicationId (aussi packageName doit être renommé en androidId )

Depuis le plugin de compilation 0.9.0 , le dossier instrumentTest est renommé en androidTest . C'est tout ce dont nous avons besoin pour les tests.

Voici un exemple de 0.11. + DSL

Android {
    compileSdkVersion 19
    buildToolsVersion "19.1.0"

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
        androidId "org.homelab.lab"
        testApplicationId "org.homelab.lab.test"
        testInstrumentationRunner "org.homelab.lab.test.Runner"
    }

    ...
}

[~ # ~] gotchas [~ # ~] : si votre fichier de construction contient des définitions de testPackageName et testInstrumentationRunner , supprimez-les

Pour la version 0.5.0 - 0.8. +

Android Studio utilise le plugin Gradle version 0.5. + Qui suit les principes Gradle SourceDir.

Android Studio project structure

Comment le faire fonctionner:
1. mise à jour du SDK
2. installez ou mettez à jour Gradle vers 1.6 (problèmes signalés avec 1.7) ou collez-le avec le wrapper gradle
3. n'utilisez pas Android Studio pour exécuter la tâche d'instrumentation, utilisez la commande gradle

gradle connectedCheck

4. n'utilisez pas le même package pour le test et l'apk principal
5.Vérifiez les résultats à l'aide du navigateur

<project>/build/reports/instrumentTests/index.html

Gotchas:
Si le package de test et le package principal sont identiques, cela peut créer TestSuite vide. Le résultat est trompeur car Gradle ne signale aucun problème mais les rapports montrent qu'aucune classe n'a été testée.

MODIFIER:

Ci-dessous la partie de build.gradle qui configure les tests d'instruments requis avant 0.9.0:

Android {
    compileSdkVersion 14
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 17
        testPackageName "org.homelab.lab.test"
        testInstrumentationRunner "org.homelab.lab.test.Runner"
    }

    ...
}

exemple de projet https://github.com/swavkulinski/Android-studio-instrumentation-test

59
robotoaster

J'éprouvais également ce problème. AndroidStudio ne construisait et n'installait que l'application principale APK sur l'appareil, et échouait aux tests avec le message suivant:

Échec du test démarré Échec du test: impossible de trouver les informations d'instrumentation pour: ComponentInfo {com.example.app.test/Android.test.InstrumentationTestRunner}

Suite de tests vide.

Pourtant, l'exécution de la cible Gradle connectedCheck générait et installait deux fichiers APK et exécutait avec succès les tests d'instrumentation. Il s'avère que vous pouvez demander à Gradle d'assembler et d'installer l'APK d'instrumentation seul en exécutant la cible installDebugAndroidTest. Après avoir exécuté cette cible, AndroidStudio a pu exécuter correctement les tests d'instrumentation et a même pu attacher le débogueur! Je suppose que vous devrez actualiser l'APK d'instrumentation à chaque fois que vous modifiez les tests eux-mêmes, mais pas autrement.

Les fichiers APK d'instrumentation installés sur l'appareil peuvent être répertoriés en exécutant: adb Shell pm list instrumentation

1
user2325282

Maintenant dans Android Studio, vous pouvez configurer instrumentTests en suivant simplement la convention de placer les tests dans l'instrumentDirectory. Gradle n'a besoin de connaître que les dépendances que vous avez, ce qui dans mon cas est Robotium:

Android Studio Screenshot

dependencies {
    androidTestCompile 'com.jayway.Android.robotium:robotium-solo:5.0.+'
}

Une fois le test terminé, les résultats seront affichés dans l'interface graphique, vous n'avez donc pas besoin d'utiliser de ligne de commande! Vous pouvez également cliquer avec le bouton droit sur le module au-dessus du test JUnit pour exécuter tous les tests JUnit.

1
jbejar

j'ai une autre façon de résoudre ce problème, si votre raison est simplement le problème de la configuration de l'exécution.

vérifiez votre configuration d'exécution , si la configuration de votre projet est Android Tests mais pas Android et alors vous devrez faire face à

"Running tests
Test running startedTest running failed: Unable to find instrumentation info for:ComponentInfo{<project-package-name>/Android.test.InstrumentationTestRunner}
Empty test suite."

supprimez donc la configuration Android Tests et ajoutez une configuration Android Application run pour votre projet, vous pouvez l'exécuter).

0
wheam