web-dev-qa-db-fra.com

Erreur = Impossible de trouver les informations d'instrumentation pour: ComponentInfo {}

J'essaie de résister aux tests expresso mais je reçois toujours cette erreur:

INSTRUMENTATION_STATUS: Error=Unable to find instrumentation info for: ComponentInfo{com.mikeestrada.test/Android.test.InstrumentationTestRunner}

Cela a fonctionné une fois, mais je n'arrive pas à recréer correctement les rapports. Ils sont juste vides, n'ont rien testé. J'ai essayé une pléthore de commandes, y compris

adb Shell am instrument -w -r com.mikeestrada.test/Android.test.InstrumentationTestRunner

et

adb Shell am instrument -w -r   com.mikeestrada.test/com.google.Android.apps.common.testing.testrunner.GoogleInstrumentation TestRunner

Voici mes extraits de code:

AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
        package="com.example.myapplication"
        Android:versionCode="1"
        Android:versionName="1.0" >

        <uses-sdk
            Android:minSdkVersion="7"
            Android:targetSdkVersion="19" />

        <application
            Android:allowBackup="true"
            Android:icon="@drawable/ic_launcher"
            Android:label="@string/app_name"
            Android:theme="@style/AppTheme" >
            <activity
                Android:name="com.example.myapplication.MainActivity"
                Android:label="@string/app_name" >
                <intent-filter>
                    <action Android:name="Android.intent.action.MAIN" />

                    <category Android:name="Android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
                <instrumentationandroid:name="com.google.Android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"                   
    Android:targetPackage="com.mikeestrada.test"/>

TestStartScreen.Java

    package com.mikeestrada.test;

    import Android.test.ActivityInstrumentationTestCase2;
    import Android.test.ActivityUnitTestCase;
    import Android.test.AndroidTestCase;
    import Android.test.suitebuilder.annotation.LargeTest;
    import Android.view.View;

    import com.example.myapplication.MainActivity;
    import com.example.myapplication.R;
    import com.google.Android.apps.common.testing.ui.espresso.Espresso;
    import com.google.Android.apps.common.testing.ui.espresso.ViewAssertion;
    import com.google.Android.apps.common.testing.ui.espresso.ViewInteraction;
    import com.google.Android.apps.common.testing.ui.espresso.action.ViewActions;
    import com.google.Android.apps.common.testing.ui.espresso.assertion.ViewAssertions;
    import com.google.Android.apps.common.testing.ui.espresso.matcher.ViewMatchers;

    import junit.framework.Assert;
    import org.hamcrest.Matcher;


    public class TestStartScreen extends ActivityInstrumentationTestCase2<MainActivity> {

        public TestStartScreen() {
            super(MainActivity.class);
        }

        @LargeTest
        public void testHelloWorld(final Matcher<View> viewMatcher) {
            // Find
            //ViewInteraction button1 = onView(ViewMatchers.withId(R.id.button1)); // Find the button
            ViewInteraction helloWorldText = Espresso.onView(ViewMatchers.withText("Hello world!")); // Find the text

            // Action
            //button1.perform(ViewActions.click()); // Click the button
            helloWorldText.perform(ViewActions.typeText("Bye World!"));
            Espresso.onView(ViewMatchers.withText(R.id.withText));

            // Check
            helloWorldText.check(ViewAssertions.matches((ViewMatchers.isDisplayed())));  // Hello world text is hidden

            //Espresso.onView(withId(R.id.my_view)).check(matches(withText("Hello  world!")));
        }
    }

build.gradle

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

repositories {
    mavenCentral()
}

Android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 19
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            assets.srcDirs = ['assets']
        }
    }
}

dependencies {
    compile 'com.Android.support:appcompat-v7:+'
    instrumentTestCompile files('libs/espresso-1.1-bundled.jar')
}
Android {
    defaultConfig {
        testInstrumentationRunner     "com.google.Android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
    }
}
task wrapper (type: Wrapper) {
    gradlerVersion = '1.9'
}

Si cela signifie quelque chose - les attributs de <instrumentation> dans le manifeste sont colorés en rouge comme si IntelliJ ne les reconnaissait pas.

Toute aide est super, merci!

35
mikeestrada67

Vous devez vérifier quels packages d'instrumentation ont été installés sur votre appareil:

 adb Shell pm list instrumentation

Vérifiez ensuite si com.mikeestrada.test y figure réellement.

76
IgorGanapolsky

En regardant votre fichier build.gradle, le problème est en fait que vous n'avez pas la configuration suivante dans la section defaultConfig:

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

L'espresso nécessite GoogleInstrumentationTestRunner pour fonctionner.

De plus, avec un système de construction Gradle, vous ne devriez pas avoir besoin d'un AndroidManifest.xml pour le projet de test car il est généré automatiquement.

6
Marc Thomas

D'après les réponses ci-dessus si le package d'instrumentation est manquant, installez-le avec la commande suivante:

$ gradle :{$project}:installDebugAndroidTest

gradle task showing location of installDebugAndroidTest

4
korosmatick

En outre, le package de votre application semble être com.mikeestrada. Donc, dans AndroidManifest, définissez Android:targetPackage comme Android:targetPackage="com.mikeestrada".

J'espère que cela vous aidera.

0
paynd

Le problème est que vous manquez un espace:

instrumentationandroid:name

devrait être

instrumentation Android:name
0
Omar Madbouli