web-dev-qa-db-fra.com

Échec du test en cours: impossible de trouver les informations d'instrumentation pour: ComponentInfo {} - erreur lors de la tentative de test dans IntelliJ avec Gradle

Chaque fois que j'essaie d'exécuter mes tests, la console dit ceci:

Running tests
Test running startedTest running failed: Unable to find instrumentation info for:
ComponentInfo{com.employeeappv2.employeeappv2.test/Android.test.InstrumentationTestRunner}
Empty test suite.

Cela fait un moment que je suis coincé là-dessus et les solutions que j'ai vues en ligne jusqu'à présent n'ont pas aidé. La structure de mon projet est la suivante:

* Module principal -src * instrumentTest -Java *principale -Java -manifeste * build.gradle

Mon fichier build.gradle ressemble à ceci:

buildscript {
repositories {
    mavenCentral()
}
dependencies {
    classpath 'com.Android.tools.build:gradle:0.9.+'
}
}
apply plugin: 'Android'

repositories {
    mavenCentral()
}

Android {
compileSdkVersion 19
buildToolsVersion "19.1.0"

defaultConfig {
    minSdkVersion 16
    targetSdkVersion 19
    versionCode 1
    versionName "2.1.0"
    testPackageName "login.test"
    testInstrumentationRunner "Android.test.InstrumentationTestRunner"
}
buildTypes {
    release {
        runProguard false
        proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-   rules.txt'
    }
}

packagingOptions {
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/license.txt'
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile files('libs/scandit.Zip')
compile project(':pullToRefresh')
compile 'com.Android.support:appcompat-v7:19.+'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.1+'
compile 'org.springframework.Android:spring-Android-rest-template:1.0.1+'
compile 'org.json:json:20090211'
compile 'com.fasterxml.jackson.core:jackson-databind:2.3.1'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.3.0'
compile 'com.fasterxml.jackson.core:jackson-core:2.3.1'
compile 'com.Android.support:support-v4:19.1.+'
compile 'com.mcxiaoke.volley:library:1.0.+@aar'
androidTestCompile 'junit:junit:3.8'
}

Avez-vous besoin d'un manifeste distinct pour votre répertoire de tests? Si oui, à quoi cela ressemblerait-il?

Edit: J'ai essayé d'ajouter un manifeste à mon répertoire instrumentTest sans succès. Notez que je ne pouvais pas obtenir IntelliJ pour résoudre le nom targetPackage, il apparaît donc en rouge.

<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
      package="com.employeeappv2.employeeappv2.src.instrumentTest"
      Android:versionCode="1"
      Android:versionName="1.0.0">
<application>
    <uses-library Android:name="Android.test.runner" />
</application>
<instrumentation
        Android:name="Android.test.InstrumentationTestRunner"
        Android:targetPackage="com.employeeappv2.employeeappv2.src.main"/>
</manifest>
47
Nick Thoma

Le problème principal était donc que lorsque j'ai créé un dossier androidTest sous/src /, IntelliJ ne le sélectionnait pas comme dossier source à des fins de test (le sous-répertoire Java devait devenir vert). J'utilisais IntelliJ 13.0.3 et, après la mise à niveau vers la version 13.1.3, tous mes problèmes sont partis. 

* Remarque: n'essayez pas d'ajouter un manifeste à votre dossier androidTest, les documents Gradle indiquent spécifiquement que le manifeste doit être généré automatiquement lorsque vous créez le dossier androidTest. Le problème pour moi était que le fichier n'était pas généré car androidTest n'était pas reconnu par IntelliJ/Gradle, ce qui a généré une erreur d'instrumentation nulle.

1
Nick Thoma

J'utilise Android Studio 1.1 et les étapes suivantes ont résolu ce problème pour moi:

  1. Dans Run - Edit Configurations - Android Tests
    Spécifiez le coureur d'instrumentation avec Android.test.InstrumentationTestRunner

  2. Puis, dans la fenêtre d’outil "Variantes de construction" (à gauche), modifiez l’artefact de test en Android Instrumentation Tests.

Aucun testInstrumentationRunner requis dans build.gradle ni aucune balise d'instrumentation requise dans le fichier manifeste.

26
Liuting

J'ai eu la même erreur lorsque j'ai essayé d'ajouter multiDexEnabled true à build.gradle.

J'ajoute mon expérience ici, car c'est l'un des premiers hits de Google lors de la recherche avec le message d'erreur ... Unable to find ... ComponentInfo ....

Dans mon cas, ajouter testInstrumentationRunner comme ici a été efficace:

...
Android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner "com.Android.test.runner.MultiDexTestRunner"
    }
}

(J'ai com.Android.tools.build:gradle:1.5.0

24
Peter Lamberg

Lorsque j'ai créé un nouveau package, Studio a créé une classe ApplicationTest. En utilisant us.myname.mypackage comme exemple, la structure de répertoire suivante a été créée: 

app/[myPackage]/src/androidTest/Java/us/myname/mypackage/ApplicationTest.class

Au début, cela a fonctionné hors de la boîte. Il a cessé de fonctionner après avoir installé des versions de produits. J'ai par la suite apporté les modifications suivantes à build.gradle:

defaultConfig {
   ...
   testInstrumentationRunner "Android.test.InstrumentationTestRunner"
}

certains préfèrent 

testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"

(Avec ma configuration actuelle, je dois utiliser ...InstrumentationTestRunner lors du débogage et AndroidJUnitRunner lors de l'utilisation du type de version release.)

La configuration ci-dessus ne fonctionne qu'avec le type de construction debug. Si vous souhaitez l’utiliser avec release ou avec un type de construction personnalisé, vous pouvez inclure les éléments suivants dans build.gradle:

buildTypes {
     release {
         ...
     }
 debug {
     ...
 }
}
testBuildType "release"

Dans l'onglet Variantes de construction situé dans le coin inférieur gauche de Studio, assurez-vous que vous avez sélectionné Android Instrumentation Tests et que vous avez sélectionné buildType.

17
VikingGlen

Pour ce que ça vaut, AS 2.3 s’est accroché quand j’ai créé un lanceur de test personnalisé après avoir utilisé le lanceur de test normal. J'ai la même erreur que celle signalée dans la question.

La suppression des configurations de débogage pourTOUSles tests instrumentés par Android et la reconstruction l’a corrigée. Je crois que le problème réside dans le fait que vous ne pouvez plus choisir un programme personnalisé dans les configurations de débogage car il est très probablement intégré via gradle.

11
LEO

Je devais combiner answer de VikingGlen, answer de Liuting et this de Cette réponse fonctionne pour Android Studio version 2.1.

  1. Exécuter -> Modifier les configurations ... -> Général -> Coureur d'instrumentation spécifique (facultatif): "Android.support.test.runner.AndroidJUnitRunner"

  2. Dans build.gradle (celui avec toutes vos dépendances), mettez ceci:

    defaultConfig { testInstrumentationRunner 'Android.support.test.runner.AndroidJUnitRunner' }

Ensuite, il pourrait exécuter des tests de ce type:

@RunWith(AndroidJUnit4.class)
@LargeTest
public class ApplicationTest {

    @Rule
    public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);

    @Test
    public void login() {
        //Open Drawer to click on navigation.
        onView(withId(R.id.drawer_layout))
                .check(matches(isClosed(Gravity.LEFT))) // Left Drawer should be closed.
                .perform(open()); // Open Drawer
    }
}
8
Rock Lee

J'ai eu ce problème et je l'ai corrigé en allant dans Exécuter -> Modifier les configurations -> bouton '+' vert en haut à gauche -> JUnit

À partir de là, définissez le 'utiliser le modpath de classpath ...' sur 'app' (ou le nom de votre application par défaut, qui est celui qui apparaît à gauche de l'exécution (bouton de lecture) lorsque vous exécutez l'application)

Enfin, placez le nom de votre classe de test dans la zone de texte 'class:'. Cliquez sur Appliquer et d'accord. 

À ce stade, si la classe de test n'a pas d'autres erreurs, cela devrait fonctionner. 

1
Daniel

Assurez-vous que l'application a été désinstallée pour tous les utilisateurs.

Allez dans paramètres -> applications (toutes les applications) -> Si votre application est là, appuyez dessus -> menu -> désinstaller pour tous les utilisateurs.

Mon problème était que l'application avait été désinstallée à un moment donné, mais toujours sur l'appareil; ce qui signifie qu'il n'a pas été désinstallé pour tous les utilisateurs. (Un autre problème, vous ne savez pas comment le résoudre. Je suis le seul utilisateur de mon appareil)

De ce fait, l'application ne serait pas réinstallée et la suite de tests ne pouvait être exécutée.

1
Sababado

C’est ce que j’ai remarqué dans mon projet: dans mon module de construction (principal), build.gradle, j’avais la configuration suivante: buildType

buildTypes {
        debug {
            multiDexEnabled true
        }

        mock {
            initWith(buildTypes.debug)
        }
    }
testBuildType "mock"

Lorsque j'ai utilisé AndroidJUnitRunner en tant que lanceur de tests (à partir d'Android Studio) et en tant que testInstrumentationRunner dans build.gradle, les tests ont été exécutés sans accroc.

Dans un sous-module qui avait multiDexEnabled true comme defaultConfig

defaultConfig {
    multiDexEnabled true
    ....
}

Je suis tombé sur le problème de 

Test running startedTest running failed: Unable to find instrumentation info for:{mypackage.x.y/Android.support.test.runner.AndroidJUnitRunner"}

quand j'ai spécifié AndroidJUnitRunner in IDE et le sous-module build.gradle. Et cela a été corrigé en spécifiant MultiDexTestRunner comme exécuteur de test dans IDE/build.gradle.

Pour résumer, utilisez MultiDexTestRunner pour exécuter des tests lorsque multiDexEnabled true est spécifié dans build.gradle. Sinon, utilisez AndroidJUnitRunner en tant que programme d'exécution de test.

0
Agnit

La solution à mon problème est de changer le nom de la méthode de

@Test
public void test() {
    ...
}

à

@Test
public void testSomething() {
    ...
}

J'espère que ça aide quelqu'un.

0
Dino Tw