web-dev-qa-db-de.com

Testlauf fehlgeschlagen: Instrumentierungsinformationen für: ComponentInfo {} - Fehler beim Versuch in IntelliJ mit Gradle nicht zu finden

Jedes Mal, wenn ich versuche, meine Tests auszuführen, sagt die Konsole Folgendes:

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

Ich bin schon eine Weile dran und die Lösungen, die ich bisher online gesehen habe, haben nicht geholfen. Meine Projektstruktur ist wie folgt aufgebaut:

* Hauptmodul -src * instrumentTest -Java *Main -Java -Manifest * build.gradle

Meine build.gradle-Datei sieht folgendermaßen aus:

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:[email protected]'
androidTestCompile 'junit:junit:3.8'
}

Benötigen Sie ein separates Manifest für Ihr Testverzeichnis? Wenn ja, wie würde das aussehen?

Bearbeiten: Ich habe ohne Erfolg versucht, ein Manifest zu meinem InstrumentTest-Verzeichnis hinzuzufügen. Beachten Sie, dass ich IntelliJ nicht dazu bringen konnte, den Namen des targetPackage aufzulösen, sodass er rot angezeigt wird.

<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

Das Hauptproblem war also, dass ich beim Erstellen eines androidTest-Ordners unter/src/von IntelliJ nicht als Quellordner zum Testen ausgewählt wurde (das Java-Unterverzeichnis sollte grün werden). Ich verwendete IntelliJ 13.0.3 und nach dem Upgrade auf 13.1.3 waren alle meine Probleme verschwunden. 

* Hinweis: Versuchen Sie nicht, Ihrem androidTest-Ordner ein Manifest hinzuzufügen. Die Gradle-Dokumente weisen ausdrücklich darauf hin, dass das Manifest automatisch generiert werden soll, wenn Sie den androidTest-Ordner erstellen. Das Problem für mich war, dass die Datei nicht als androidTest generiert wurde, das von IntelliJ/Gradle nicht erkannt wurde, und es wurde kein Instrumentierungsfehler ausgegeben.

1
Nick Thoma

Ich verwende Android Studio 1.1 und die folgenden Schritte haben dieses Problem für mich gelöst:

  1. In Run - Edit Configurations - Android Tests
    Geben Sie den Instrumentation Runner als Android.test.InstrumentationTestRunner an.

  2. Ändern Sie dann im Werkzeugfenster "Varianten erstellen" (links) das Testartefakt in Android Instrumentation Tests.

In build.gradle ist kein testInstrumentationRunner und in der Manifestdatei kein Instrumentation-Tag erforderlich.

26
Liuting

Ich hatte die gleiche Fehlermeldung, als ich multiDexEnabled true zu build.gradle hinzugefügt habe.

Ich füge meine Erfahrung hier hinzu, da dies einer der ersten Google-Treffer bei der Suche mit der ... Unable to find ... ComponentInfo ...-Fehlermeldung ist.

In meinem Fall hat das Hinzufügen von testInstrumentationRunner wie hier den Trick:

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

(Ich habe com.Android.tools.build:gradle:1.5.0

24
Peter Lamberg

Beim Erstellen eines neuen Pakets hat Studio eine ApplicationTest-Klasse erstellt. Am Beispiel von us.myname.mypackage wurde die folgende Verzeichnisstruktur erstellt: 

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

Anfangs klappte es aus der Box. Es funktionierte nicht mehr, nachdem ich Produktvarianten installiert hatte. Anschließend habe ich folgende Änderungen an build.gradle vorgenommen:

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

einige bevorzugen 

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

(Bei meiner aktuellen Konfiguration muss ich beim Debuggen ...InstrumentationTestRunner und beim Version-Build-Typ AndroidJUnitRunner verwenden.)

Die obige Konfiguration funktioniert nur mit dem Build-Typ Debug. Wenn Sie es mit Release oder mit einem benutzerdefinierten Build-Typ verwenden möchten, können Sie Folgendes in build.gradle einfügen:

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

Stellen Sie sicher, dass auf der Registerkarte "Varianten erstellen" links unten in Studio Android Instrumentation Tests und die richtige buildType ausgewählt sind.

17
VikingGlen

AS 2.3 wurde aufgehängt, als ich einen benutzerdefinierten Testrunner erstellt hatte, nachdem ich den regulären Testrunner verwendet hatte. Ich habe den gleichen Fehler wie in der Frage gepostet.

Das Löschen der Debug-Konfigurationen fürALLEAndroid-instrumentierte Tests und das Wiederherstellen des Problems wurde behoben. Ich glaube, das Problem lag darin, dass Sie in den Debug-Konfigurationen keinen benutzerdefinierten Läufer mehr auswählen können, da er höchstwahrscheinlich in Gradle integriert ist.

11
LEO

Ich musste eine Kombination aus VikingGlen answer , Liuting answer und this answer machen. Diese Antwort funktioniert für Android Studio Version 2.1.

  1. Ausführen -> Konfigurationen bearbeiten ... -> Allgemein -> Spezieller Instrumentierungsläufer (optional): "Android.support.test.runner.AndroidJUnitRunner"

  2. Geben Sie in build.gradle (der mit all Ihren Abhängigkeiten) Folgendes ein:

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

Dann könnten Tests dieses Typs ausgeführt werden:

@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

Ich hatte dieses Problem und behebte es, indem ich oben links auf Ausführen -> Konfigurationen bearbeiten -> Grüne '+' - Taste -> JUnit ging

Setzen Sie von dort aus die Option 'use the classpath mod ...' auf 'app' (oder Ihren Standard-App-Namen. Dies ist der Name, der beim Ausführen der App auf der linken Seite des Laufs (Play-Schaltfläche) erscheint)

Geben Sie schließlich Ihren Testklassennamen in das Textfeld "class:" ein. Klicken Sie auf "Übernehmen" und "OK". 

Wenn zu diesem Zeitpunkt die Testklasse keine anderen Fehler aufweist, sollte dies funktionieren. 

1
Daniel

Stellen Sie sicher, dass die App für alle Benutzer deinstalliert wurde.

Gehen Sie zu Einstellungen -> Apps (alle Apps) -> Wenn Ihre App vorhanden ist, tippen Sie darauf -> Menü -> Für alle Benutzer deinstallieren.

Mein Problem war, dass die App an einem Punkt deinstalliert wurde, jedoch immer noch auf dem Gerät. Dies bedeutet, dass es nicht für alle Benutzer deinstalliert wurde. (Ein anderes Problem, nicht sicher, wie das Problem gelöst werden soll. Ich bin der einzige Benutzer auf meinem Gerät.)

Aus diesem Grund konnte die App nicht erneut installiert werden, und die Testsuite hatte nichts dagegen zu laufen.

1
Sababado

Dies ist mir in meinem Projekt aufgefallen, in meinem App (Haupt) -Modul build.gradle hatte ich die folgende buildType-Konfiguration

buildTypes {
        debug {
            multiDexEnabled true
        }

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

Wenn ich AndroidJUnitRunner als Testläufer (beide von Android Studio) und als testInstrumentationRunner in build.gradle verwendet habe, liefen die Tests problemlos.

In einem Untermodul mit multiDexEnabled true als defaultConfig

defaultConfig {
    multiDexEnabled true
    ....
}

Ich stieß auf das Problem von 

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

wenn ich AndroidJUnitRunner in IDE und das Untermodul build.gradle angegeben habe. Und dies wurde durch Angabe von MultiDexTestRunner als Testläufer in IDE/build.gradle behoben.

Zusammenfassend können Sie mit MultiDexTestRunner Tests ausführen, wenn multiDexEnabled true in build.gradle angegeben ist. Andernfalls verwenden Sie AndroidJUnitRunner als Testläufer.

0
Agnit

Die Lösung für mein Problem besteht darin, den Methodennamen zu ändern

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

zu

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

Hoffe es hilft jemandem.

0
Dino Tw