web-dev-qa-db-fra.com

Importation des tests unitaires existants dans Android Studio "Impossible de trouver les informations sur l'instrumentation"

J'essaye donc notre studio Android et teste un projet qui a fonctionné dans Eclipse. J'ai tout compilé et l'application se lancera très bien, mais je ne parviens pas à faire fonctionner mes tests unitaires. Je les ai finalement compilées en ajoutant le dossier lib de mes applications en tant que dépendance, mais je ne pense pas que ma configuration d’exécution est correcte, car chaque fois que j’effectue mes tests, le message d'erreur s'affiche.

Installing <packagename>
DEVICE Shell COMMAND: pm install -r "/data/local/tmp/<packagename>"
pkg: /data/local/tmp/<packagename>
Success


Running tests
Test running started
Test running failed: Unable to find instrumentation info for: ComponentInfo{<packagename>/Android.test.InstrumentationTestRunner}
Empty test suite.

Edit: Pour tous les nouveaux arrivants, l’état d’Android Studio a beaucoup changé depuis que j’ai posté cette question pour la première fois, mais de nombreuses personnes utiles ont continué à publier leur solution à cette erreur. Je conseillerais de trier par actif et de vérifier les réponses les plus récentes en premier.

60
AJD

Si vous avez un testInstrumentationRunner défini dans votre build.gradle comme ceci:

Android {
    defaultConfig {
        testInstrumentationRunner "com.google.Android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"

assurez-vous que, dans la fenêtre de configuration d'exécution, vous utilisez exactement le même "Runner d'instrumentation spécifique" dans la configuration d'exécution de votre Android Studio/IntelliJ pour votre test.

60
thoutbeckers

Dans mon cas, la solution était:

  • Affichage> Fenêtres d'outils> Variantes de construction
  • Sélectionnez une * variante de débogage
19
Matt McClure

Explication et solution

Cette erreur " Impossible de trouver l'instrumentation " apparaît si targetPackage déclaré dans le manifeste de l'application de test est différent du package déclaré dans le manifeste de l'application en cours de test:

  • Application en cours de test:

    <manifest package="com.example.appbeingtested" … >
    
  • Application de test: 

    <instrumentation
        Android:name="Android.test.InstrumentationTestRunner"
        Android:targetPackage="com.example.appbeingtested" … />
    
18
BenL

J'ai résolu ce problème en changeant 

Android.test.InstrumentationTestRunner 

dans 

com.Android.test.runner.MultiDexTestRunner

dans EditConfigurations -> onglet Instrumentation Runner spécifique (facultatif).

En fait, comme mon application utilise MultiDex, je dois également changer le programme d’exécution de test en MultiDexTestRunner.

METTRE À JOUR:

En tant que commentaire @dan, InstrumentationTestRunner est obsolète. Utilisez plutôt AndroidJUnitRunner.

16
aldok

Dans mon cas, les configurations Run/Debug étaient erronées.

Une solution:

  1. Aller à la configuration Run/Debug

    Run -> Edit Configurations ...

  2. Configurez un test Android pour votre classe de test 

  3. Sélectionnez votre configuration de test Android sur le côté gauche 
    ou créez-en un nouveau avec l'icône Plus et nommez-le, par exemple. ClassName Test

  4. Sélectionnez le module contenant votre classe de test. Dans le cas le plus simple, la classe de test est dans votre module d'application. Sélectionnez donc app.

  5. Sélectionnez à la ligne suivante votre configuration de test. J'utilise:

    • Class: pour exécuter tous les tests d'une classe.
  6. Choisissez votre classe de test

  7. Enfin, configurez votre appareil cible et sélectionnez OK.

4
auerc89

Ceci ne fonctionne que dans AndroidStudio Version <2.3

Dans mon cas, le mauvais coureur d'instrumentation a été sélectionné. 

J'ai corrigé cela en spécifiant le coureur d'instrumentation dans la configuration Run/Debug du test (voir ci-dessous). Là, vous pouvez sélectionner un coureur de la liste. 1]

Vous trouvez les configurations Run/Debug: Run -> Edit Configurations ...

4
Petterson

J'ai le même problème que @Iuliia Ashomok et j'ai tout essayé sur Internet.

Toujours pas de chance.

Après 2 jours d’investigation, j’ai trouvé que le problème était créé par le téléphone portable. .V.

À l'origine, j'utilise Xiaomi Mi4i comme périphérique de test (enraciné) et les tests ne peuvent pas être exécutés. Bien sûr, j'ai l'erreur ci-dessous.

Test running failed: Unable to find instrumentation info for: ComponentInfo{<packagename>/Android.test.InstrumentationTestRunner}

Cependant, lorsque j'utilise Sony Xperia Z3 (pas de racine), tout fonctionne bien.

2
VoidExplorer

Il semble que vous n’ayez pas une bonne structure de projet. 

  1. Ouvrez AndroidManifest.xml et vérifiez-le 

    <instrumentation Android:name="Android.test.InstrumentationTestRunner"
                         Android:targetPackage="com.example.YourClass"
                         Android:label="Tests for com.example.YourClass"/>
    

Si NON, ensuite: 

  1. Réorganisez la structure de votre répertoire comme suit: (c'est la recommandation de source officielle )
        MyProject/
              AndroidManifest.xml
              res/
                  ... (resources for main application)
              src/
                  ... (source code for main application) ...
              tests/
                  AndroidManifest.xml
                  res/
                      ... (resources for tests)
                  src/
                      ... (source code for tests)
  1. Vous voyez que vous devez avoir le module inner tests
    Pour le créer dans Idea IDE, suivez Fichier -> Nouveau module -> Module de test. Après la création, vous pouvez voir un nouveau AndroidManifest.xml. Et il y a une déclaration instrumentation à l'intérieur.
1
Yuliia Ashomok

J'ai eu une fois cette erreur. J'utilise les outils SDK en mode CLI. Et l'erreur s'est produite lorsque j'ai lancé 'ant test' dans le projet test. J'ai remarqué plus tard que je n'avais même pas construit et installé le projet de test auparavant! (avec 'ant debug install') Vous devriez donc essayer de vérifier votre configuration en cours d'exécution pour voir si le projet de test a bien été construit avant d'exécuter le test. Dans l’autre cas, Android Studio utilise Gradle. Je ne le connais pas bien, mais essayez de vérifier les paramètres Gradle pour le projet ou le fichier de paramètres Gradle.

0
godidier

Cette réponse va expliquer l'historique des problèmes et résumer tous les paramètres associés.

En gros, il existe 3 emplacements possibles pour les configurations de runner de test d’instrumentation.

  1. Dans EditConfigurations -> onglet Général -> coureur spécifique d'instrumentation (facultatif)
    Il existe déjà dans Android Studio 2.2 et une version antérieure. Dans la dernière version, il est déjà supprimé.

  2. Dans le fichier manifeste, le lanceur de test est configuré comme suit.

    < instrumentation Android:name="Android.support.test.runner.AndroidJUnitRunner"
           Android:targetPackage="com.mytestapp.test"/>

Étant donné que "Android.test.InstrumentationTestRunner" est obsolète dans le niveau 24 de l'API, ce paramètre n'est également pas nécessaire, tant que vous configurez le coureur dans un fichier de niveaux.
Si vous souhaitez conserver ce paramètre, assurez-vous que le nom du coureur doit correspondre à celui que vous avez défini dans le fichier de classe, sinon vous obtiendrez également cette erreur.

  1. En fichier de classement.
    C’est la seule façon recommandée si vous utilisez Android Studio v2.3 ci-dessus.
    Android {
    .......
        defaultConfig {  
            .......  
            testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"  
        }   
    }
0
Weidian Huang

Dans mon cas, dans les mêmes classes, certains cas de test sélectionnaient le bon exécuteur de test (Android.support.test.runner.AndroidJUnitRunner) défini dans build.gradle et certains cas de test récupéraient Android.test.InstrumentationTestRunner, qui n'était pas défini au moins dans Manifest ou build.gradle ou edit configuration. Idéalement, cela aurait dû être résolu par l'option Sync Project avec l'option Gralde, bien que cela n'ait pas fonctionné.

Enfin, j'ai trouvé un testeur de test incorrect défini par rapport à une méthode dans .idea/workspace.xml, je l'ai modifié manuellement et le problème a été résolu. 

Généralement, nous ne sommes pas censés éditer ce fichier généré par Android Studio, mais pour moi, cela a fonctionné comme dernière option. 

0
user7154703

Étant donné qu'aucune de ces réponses ne m'a aidé, je voulais partager ma solution à toute personne aussi désespérée que moi. :)

En raison des bibliothèques de test que j'utilisais, je devais activer le support multidex en ajoutant multiDexEnabled true à ma construction Gradle. Je ne suis pas sûr que le support multidex soit entièrement implémenté (la manière appropriée de le faire a changé depuis la dernière mise en œuvre), mais au final, je n'en ai plus eu besoin et la suppression de cette ligne de ma version a corrigé l'erreur . Mon équipe au travail a eu quelques problèmes de test liés à l'activation de la prise en charge multidex… dans un style Android typique.

0
spaaarky21

Pour moi le problème était d'avoir cette dépendance:

debugCompile 'com.Android.support.test:rules:0.2'

Après l'avoir enlevé, mes tests ont été trouvés et exécutés à nouveau.

Notez que je n'ai pas reçu le message "Impossible de trouver l'instrumentation" mais le message "Aucun test trouvé".

0
Ciske Boekelo

Dans mon cas, le problème était dans l'appareil aussi. D'autres appareils fonctionnaient bien. Une simple désinstallation et réinstallation corrigé.

0
Bhiefer

Il s'est avéré être un problème de retard. Cela a été corrigé automatiquement après avoir attendu un moment en lisant les solutions Internet. J'ai recompilé le code, et cela a fonctionné.

0
mohghaderi