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>
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.
Ich verwende Android Studio 1.1 und die folgenden Schritte haben dieses Problem für mich gelöst:
In Run - Edit Configurations - Android Tests
Geben Sie den Instrumentation Runner als Android.test.InstrumentationTestRunner
an.
Ä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.
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
)
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.
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.
Ich musste eine Kombination aus VikingGlen answer , Liuting answer und this answer machen. Diese Antwort funktioniert für Android Studio Version 2.1.
Ausführen -> Konfigurationen bearbeiten ... -> Allgemein -> Spezieller Instrumentierungsläufer (optional): "Android.support.test.runner.AndroidJUnitRunner"
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
}
}
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.
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.
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.
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.