Error=Instrumentierungsinformationen können nicht gefunden werden für: ComponentInfo{ }

Lesezeit: 5 Minuten

Benutzeravatar von mikeestrada67
mikeestrada67

Ich versuche, Espresso-Tests durchzuführen, aber ich erhalte immer wieder diesen Fehler:

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

Es hat einmal funktioniert, aber ich kann die Berichte nicht korrekt neu erstellen. Sie sind nur leer, haben nichts getestet. Ich habe eine Fülle von Befehlen ausprobiert, einschließlich

adb shell am instrument -w -r com.mikeestrada.test/android.test.InstrumentationTestRunner

und

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

Hier sind meine Codeschnipsel:

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'
}

Wenn es etwas bedeutet – die Attribute von <instrumentation> im Manifest sind rot eingefärbt, als würde IntelliJ sie nicht erkennen.

Jede Hilfe ist großartig, danke!

  • Könnten Sie Ihre Test-AndroidManifest.xml posten?

    – Bolhoso

    27. Januar 2014 um 0:03 Uhr

  • Ops, tut mir leid, jetzt sehe ich das -Tag 😉 Was meine Aufmerksamkeit erregt hat, ist, dass Sie eine Aktivität in Ihrem -Abschnitt Ihres AndroidManifest deklariert haben. Ich habe noch nie gesehen, dass eine Test-App eine Aktivität deklariert. Versuchen Sie, das zu entfernen, und prüfen Sie, ob Ihre Tests so verlaufen, wie Sie es verdienen.

    – Bolhoso

    28. Januar 2014 um 1:04 Uhr


  • vielleicht hilft das weiter: stackoverflow.com/questions/14269687/…

    – gsaslis

    18. April 2014 um 10:21 Uhr

Sie müssen überprüfen, welche Instrumentierungspakete auf Ihrem Gerät installiert wurden:

 adb shell pm list instrumentation

Überprüfen Sie dann, ob com.mikeestrada.test ist dort tatsächlich aufgeführt.

  • und wenn nicht?

    – siehe da

    12. April 2016 um 7:59 Uhr

  • @behelit Dann können Sie keine Instrumentierungstests durchführen.

    – IgorGanapolsky

    12. April 2016 um 12:43 Uhr

  • @dan Wenn du sagst ~”nichts funktioniert“, welchen Fehler bekommst du genau?

    – IgorGanapolsky

    14. März 2017 um 15:09 Uhr

  • Ich glaube, ich habe irgendwo gelesen, dass die App-IDs automatisch so konfiguriert werden sollten, dass sie zur Laufzeit eindeutig sind. Aber das manuelle Ändern (angehängtes “.test”) war die einzige Möglichkeit, meine Tests zum Laufen zu bringen. Ich weiß nicht warum.

    – Julsteri

    31. Mai 2017 um 9:12 Uhr

  • Es tut uns leid! Ich kann nicht überprüfen, ob meine Anwendung dort mit dem angegebenen Befehl “adb shell pm list instrumentation” aufgeführt ist. Wenn ich “adb shell “pm list packages”|cut -f 2 -d “:”” verwende, wird meine Anwendung angezeigt.

    – Vijay

    6. März 2018 um 10:06 Uhr


Benutzeravatar von korosmatick
Korosmatik

Wenn das Instrumentierungspaket fehlt, installieren Sie es mit dem folgenden Befehl:

$ gradle :{$project}:installDebugAndroidTest

Gradle-Aufgabe, die den Speicherort von installDebugAndroidTest anzeigt

  • Dies wurde behoben, aber in meinem Fall lautete der Aufgabenname “installAdhoctestDebugAndroidTest”.

    – Juni

    14. Januar 2019 um 15:18 Uhr

Benutzeravatar von Marc Thomas
Markus Thomas

Wenn Sie sich Ihre build.gradle-Datei ansehen, besteht das Problem tatsächlich darin, dass Sie die folgende Konfiguration im Abschnitt defaultConfig nicht haben:

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

Espresso erfordert GoogleInstrumentationTestRunner um zu arbeiten.

Auch mit einem Gradle-Build-System sollten Sie keine benötigen AndroidManifest.xml für das Testprojekt, da es automatisch generiert wird.

Benutzeravatar von MatPag
MatPag

Befolgen Sie diese Anweisungen, um den Instrumententest korrekt durchzuführen:

  1. Installieren Sie das Basispaket auf dem Gerät/Emulator. Zum Beispiel, wenn Sie testen möchten devDebug {flavorBuildType}-Kombination, ausführen ./gradlew installDevDebug. Ersetzen devDebug string mit Flavor und buildType, die Sie in Ihrem Projekt haben.

  2. Installieren Sie das Testpaket auf dem Gerät/Emulator. Wenn Sie installiert haben devDebug nun ausführen ./gradlew installDevDebugAndroidTeststandardmäßig wird dadurch das Basispaket installiert, das die .test Suffix

  3. Stellen Sie sicher, dass die Instrumentierung korrekt installiert ist und ausgeführt wird adb shell pm list instrumentation Es sollte eine Zeile mit Ihrem Testpaket und dem verfügbaren Läufer drucken, etwa so: androidx.test.runner.AndroidJUnitRunner

  4. Starten Sie den Instrumentierungstest. Wenn Sie beispielsweise eine einzelne Testklasse aus Ihrem Paket testen möchten, können Sie Folgendes tun: adb shell am instrument -w -e class com.your.base.package.MyClassTest com.your.base.package.test/androidx.test.runner.AndroidJUnitRunner. Überprüfen Sie das Dokument hier für alle verfügbaren Optionen

  5. Optional: Nach Abschluss der Tests können Sie die Pakete mit deinstallieren ./gradlew uninstallDevDebug uninstallDevDebugAndroidTest

Benutzeravatar von paynd
zahlend

Außerdem sieht es so aus, als wäre Ihr App-Paket com.mikeestrada. Also in AndroidManifest gesetzt android:targetPackage wie android:targetPackage="com.mikeestrada".

Ich hoffe, das wird helfen.

Benutzeravatar von Frank Bryce
Frank Brice

Das Problem ist, dass Ihnen ein Leerzeichen fehlt:

instrumentationandroid:name

sollte sein

instrumentation android:name

Benutzeravatar von ether_joe
ether_joe

https://developer.android.com/studio/test/command-line

Sieht so aus, als müssten Sie sicherstellen, dass Ihre App und Test-APKs installiert sind.

1394150cookie-checkError=Instrumentierungsinformationen können nicht gefunden werden für: ComponentInfo{ }

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy