webentwicklung-frage-antwort-db.com.de

Symbol "AndroidJUnit4" kann nicht aufgelöst werden

Offensichtlich brauche ich die korrekte Import-Anweisung, um dieses Problem zu lösen. Dies sollte laut docs for AndroidJUnit4 der Fall sein 

import Android.support.test.runner.AndroidJUnit4;

Wenn ich das mache, hebt Android Studio runner in Rot hervor und beschwert sich darüber, dass das Symbol "Runner" nicht aufgelöst werden kann.

Hintergrund

Ich bin an diesem Punkt angelangt, indem ich die Tutorials auf der Android-Entwicklerwebsite für Einrichten von Tests mit UI Automator befolgte. Das erste Problem, auf das ich gestoßen bin, war, dass com.Android.support:support-v4:22.2.0 und com.Android.support.test:runner:0.2 von verschiedenen Versionen von com.Android.support:support-annotations abhängen. Ich folgte den Vorschlägen von diesem Android-Fehlerbericht und fügte der Variable allprojects im build.gradle meines Projekts Folgendes hinzu:

configurations.all {
    resolutionStrategy.force 'com.Android.support:support-annotations:22.1.0'
}

Dies löste den sofortigen Fehler, aber ich vermute, dass dies zu meinen aktuellen Problemen führte. Hat jemand Vorschläge, wie man das beheben kann?

Relevante Abschnitte aus `./gradlew: app: dependencies

androidTestCompile - Classpath for compiling the androidTest sources.
+--- com.jayway.Android.robotium:robotium-solo:5.2.1
+--- com.squareup:fest-Android:1.0.8
|    \--- org.easytesting:fest-assert-core:2.0M10
|         \--- org.easytesting:fest-util:1.2.5
+--- com.Android.support.test:runner:0.2
|    +--- junit:junit-dep:4.10
|    |    \--- org.hamcrest:hamcrest-core:1.1
|    +--- com.Android.support.test:exposed-instrumentation-api-publish:0.2
|    \--- com.Android.support:support-annotations:22.0.0 -> 22.2.0
+--- com.Android.support.test:rules:0.2
|    \--- com.Android.support.test:runner:0.2 (*)
\--- com.Android.support.test.uiautomator:uiautomator-v18:2.1.0

compile - Classpath for compiling the main sources.
+--- com.Android.support:appcompat-v7:22.2.0
|    \--- com.Android.support:support-v4:22.2.0
|         \--- com.Android.support:support-annotations:22.2.0
+--- com.Android.support:support-v4:22.2.0 (*)
+--- com.google.Android.gms:play-services:6.1.71
|    \--- com.Android.support:support-v4:20.0.0 -> 22.2.0 (*)
+--- com.crashlytics.Android:crashlytics:1.+ -> 1.1.13
\--- com.jakewharton:butterknife:5.1.2
109
Code-Apprentice

Update

Die Android Test Library ist jetzt Teil von AndroidX. Stellen Sie sicher, dass Sie die richtigen Gradle-Abhängigkeiten verwenden, die in der offiziellen Dokumentation aufgeführt sind.

Originalantwort

Ich fand hier , dass es neuere Versionen der Testing Support Library gibt als die, die ich verwendet habe:

dependencies {
    androidTestCompile 'com.Android.support.test:runner:0.5'
    androidTestCompile 'com.Android.support.test:rules:0.5'
    androidTestCompile 'com.Android.support.test.uiautomator:uiautomator-v18:2.1.2'
}

Hinweis: Stellen Sie sicher, dass Sie die neuesten Versionen dieser Bibliotheken verwenden. Diese Frage stammt aus einer Zeit, als die Android Test Support Library neu war und die Versionsnummern hier sehr veraltet sind.

26
Code-Apprentice

Stellen Sie sicher, dass Ihre App eine Debug-Build-Variante hat. Gehen Sie zu Build> Build-Variante auswählen ... und Folgendes sollte angezeigt werden:

 enter image description here

159
orium

Ich habe den Fehler gemacht, die Testklassen nach src/test zu setzen. Nachdem sie nach src/androidTest/Java/verschoben wurden, wurde die Abhängigkeit aufgelöst.

94
mikes

Ok, hier ist dein Fehler und meins!

Wenn wir ein Stück Code für Local Unit Testing schreiben sollten wir @RunWith(AndroidJUnit4.class) nicht verwenden, da wir AndroidJUnit4 nicht verwenden, aber Junit4 benötigen. Wir sollten also @RunWith(JUnit4.class) schreiben. Ihre Java-Testdatei befindet sich natürlich im Verzeichnis app/src/test/Java/your.package.name.

Andernfalls (!!) möchten wir einige Android Instrumented Unit-Tests schreiben Wir sollten unsere Test-Java-Dateien im app/src/androidTest/Java/your.package.name-Verzeichnis ablegen und Anmerkungen wie @RunWith(AndroidJUnit4.class) verwenden

59
Sepehr Behroozi

Ich habe das Problem durch eine kleine Änderung in der build.gradle-Datei der App gelöst. Stellen Sie im Abschnitt dependencies { ... } sicher, dass folgende Zeile eingefügt wird:

debugImplementation 'com.Android.support.test:runner:1.0.1'

oder welche Version zu diesem Zeitpunkt die neueste ist (...Compile ist veraltet und wurde durch ...Implementation ersetzt). Note die Verwendung von debugImplementation. Android Studio schlug vor, es automatisch mit androidTestImplementation aufzunehmen, was nicht funktionierte.

Ich habe herausgefunden, wie ich es von Test zu Debuggen ändern kann, indem Sie in Projektstruktur unter Abhängigkeiten des App-Moduls nachsehen, wo Sie den Umfang jeder Abhängigkeit ändern können.

 Project structure

19
stemadsen

In meinem Fall half das für die Release-Variante: 

Android {
    ...
    testBuildType "release" 
}
3
Andrew Glukhoff

Wenn jemand dieses Problem noch hat:

Symbol "AndroidJUnit4" kann nicht aufgelöst werden

fügen Sie mithilfe von API 27 im build.gradle, das sich im App-Modul befindet, die folgenden Zeilen hinzu:

testImplementation 'junit:junit:4.12'

// AndroidJUnitRunner and JUnit Rules
androidTestImplementation 'com.Android.support.test:runner:1.0.2'
androidTestImplementation 'com.Android.support.test:rules:1.0.2'

// Espresso dependencies
androidTestImplementation 'com.Android.support.test.espresso:espresso-core:3.0.2'
2
tm81

fügen Sie diesen Code in Ihre Abhängigkeiten ein

compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.Android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.Android.support', module: 'support-annotations'
})

Beachten Sie, dass das OP jetzt im Jahr 2019 ist, also 4 Jahre alt. Wenn Sie Android X verwenden, dann AndroidJUnit4.class veraltet ist, haben Sie einen Fehler und einen weiteren mit diesem androidx.test.ext.junit.runners.AndroidJUnit4 . Ich schlage vor, diese Links zu lesen, um das Problem zu lösen.

AndroidJUnit4.class ist veraltet: Verwendung von androidx.test.ext.junit.runners.AndroidJUnit4?

Migrieren von Junit4-Tests nach androidx: Welche Ursachen hat es, dass "Delegate Runner" nicht geladen werden konnte? Für mich schlug Android Studio vor, diese zu ersetzen

@RunWith(AndroidJUnit4.class)

das war veraltet mit

@RunWith(AndroidJUnit4ClassRunner.class)

und das

androidx.test.ext.junit.runners.AndroidJUnit4

mit diesem

import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner;

Danach ist der Fehler weg, aber ich weiß nicht, ob der zukünftige Test während des Laufs in Ordnung ist ?!

1
leonidaa

Verschieben Sie die Testklasse nach src/androidTest/Java /. Dann wird die Abhängigkeit aufgelöst.

1
Komal Nikhare

Wenn Sie ein Projekt mit mehreren Build-Typen verwenden, muss der ausgewählte Build-Typ im Fenster der Build-Variante mit dem Tag testBuildType in der Datei build.gradle des Moduls angegeben werden.

Zum Beispiel: Wenn Sie den Build-Typ debug verwenden, sollten Sie Android{testBuildType "debug" } hinzufügen, wenn Sie stage verwenden, dann fügen Sie die Android{testBuildType "stage"}-Anweisung im Android-Tag hinzu.

1
Rahul Rastogi

Der klassische Invalidate Caches/Restart hat mir geholfen! :)

0
user_MGU

Hinzufügen

compile com.Android.support.test:runner:0.5'

dieses Problem für mich gelöst.

0
donlys

Wie die Liste der Antworten zeigt, kann dies auf ein paar Dinge zurückzuführen sein. Noch eine für die Liste:

Ich führte einen übereifrigen LINT aus, der alle nicht verwendeten Importe entfernte. Dies führt zu den gleichen Fehlern und es ist leicht zu übersehen, dass dies das Problem ist. 

Android-Studio markiert Verweise, die im Testcode fehlen, und das ALT-ENTER-Popup-Fenster wird angezeigt (dies ist das Bit, das leicht zu übersehen ist). 

Als nächstes muss ich die Tests von LINT entfernen - oder diese Warnung zumindest deaktivieren.

Edit: @ Code-Apprentice, die fehlenden Zeilen waren:

import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;


import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

Der erste Fehler in der Datei war also mit @RunWith(AndroidJUnit4.class) am Anfang meiner Testklasse.

0
winwaed