Natürlich brauche ich die richtige Importanweisung, um dieses Problem zu lösen. Laut den Dokumenten fürAndroidJUnit4
sollte dies sein
import android.support.test.runner.AndroidJUnit4;
Wenn ich das mache, hebt Android Studio runner
rot hervor und beschwert sich "Symbol 'Läufer' kann nicht aufgelöst werden".
Hintergrund
Ich kam zu diesem Punkt, indem ich den Tutorials auf der Android Developer-Website zum Einrichten von Tests mit UI Automator folgte . Das erste Problem, auf das ich gestoßen bin, war das com.android.support:support-v4:22.2.0
und com.android.support.test:runner:0.2
hängt von verschiedenen Versionen von ab com.android.support:support-annotations
. Ich folgte den Vorschlägen aus diesem Android-Fehlerbericht und fügte allprojects
in meinem Projekt Folgendes hinzu build.gradle
:
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 dies behoben werden kann?
Relevent Abschnitte aus `./gradlew: app: Abhängigkeiten
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
quelle
com.android.support.test:runner
völlig fehlt . Können Sie bestätigen,gradle dependencies
dass Sie dies nach derresolutionStrategy
Änderung noch tun ?(*)
bedeutetcom.android.support.test:runner:0.2
.Antworten:
Stellen Sie sicher, dass sich Ihre App in der Debug-Build-Variante befindet. Gehen Sie zu Build> Select Build Variant ... und Folgendes sollte angezeigt werden:
quelle
android { testBuildType "staging"}
debug
, funktionieren nur, wenn sie explizit auf "debuggen" gesetzt sindIch habe den Fehler gemacht, die Testklassen auf src / test zu setzen . Nach dem Verschieben nach src / androidTest / java / wurde die Abhängigkeit aufgelöst.
quelle
Ok, hier ist dein und mein Fehler!
Wenn wir ein Stück Code für Local Unit Testing schreiben wollen, sollten
@RunWith(AndroidJUnit4.class)
wir es nicht verwenden, da wir nicht AndroidJUnit4 verwenden, sondern Junit4. also sollten wir schreiben@RunWith(JUnit4.class)
. Und natürlich befindet sich Ihre Java-Testdatei imapp/src/test/java/your.package.name
Verzeichnis.Andernfalls, wenn (!!) wir einen Android Instrumented Unit Test schreiben möchten, sollten wir unsere Test-Java-Dateien in ein
app/src/androidTest/java/your.package.name
Verzeichnis stellen und Anmerkungen wie verwenden@RunWith(AndroidJUnit4.class)
quelle
Aktualisieren
Die Android-Testbibliothek ist jetzt Teil von AndroidX. Stellen Sie sicher, dass Sie die richtigen Gradle-Abhängigkeiten verwenden, die in der offiziellen Dokumentation enthalten sind .
Ursprüngliche Antwort
Ich habe hier festgestellt , dass es neuere Versionen der Testing Support Library gibt als die, die ich verwendet habe:
Hinweis: Verwenden Sie unbedingt die neuesten Versionen dieser Bibliotheken. Diese Frage stammt aus einer Zeit, als die Android Test Support Library neu war und die Versionsnummern hier sehr veraltet sind.
quelle
Ich habe das Problem gelöst, indem ich eine kleine Änderung in der build.gradle-Datei der App vorgenommen habe.
dependencies { ... }
Stellen Sie sicher, dass in diesem Abschnitt die folgende Zeile enthalten ist:oder welche Version zu diesem Zeitpunkt die neueste ist (
...Compile
ist veraltet und wurde durch ersetzt...Implementation
). Beachten Sie die Verwendung vondebugImplementation
. Android Studio schlug vor, es automatisch einzuschließenandroidTestImplementation
, was nicht funktionierte.Ich habe herausgefunden, wie man es vom Test zum Debuggen ändert, indem ich in Projektstruktur unter Abhängigkeiten des App-Moduls nachgesehen habe, wo Sie den Umfang jeder Abhängigkeit ändern können (siehe unten).
quelle
Beachten Sie, dass das OP jetzt im Jahr 2019 4 Jahre alt ist. Wenn Sie Android X verwenden,
AndroidJUnit4.class
ist es veraltet. Dort und dort ist ein Fehler aufgetretenandroidx.test.ext.junit.runners.AndroidJUnit4
. Ich schlage vor, diese Links zu lesen, um das Problem zu lösen.AndroidJUnit4.class ist veraltet: Wie verwende ich androidx.test.ext.junit.runners.AndroidJUnit4?
Junit4-Tests nach AndroidX migrieren: Was verursacht, dass der Delegate Runner nicht geladen werden konnte? Für mich schlug Android Studio vor, zu ersetzen
was mit veraltet war
und das
mit diesem
Danach ist der Fehler verschwunden, aber ich weiß nicht, ob der zukünftige Test in Ordnung ist ?!
quelle
In meinem Fall hat dies für die Release-Variante geholfen:
quelle
Die häufigste Ursache für dieses Problem ist, dass beim Hinzufügen der folgenden Abhängigkeit:
Dies ist eine korrekte Abhängigkeit, wenn Sie instrumentierte Tests verwenden möchten (Tests im
androidTest
Java-Paket).Aber zum Implementieren lokaler Komponententests (Tests im
test
Java-Paket) unter Verwendung der oben genannten Abhängigkeit; dann wirst du dich stellenCannot resolve symbol 'AndroidJUnit4'
Dies liegt daran, dass die
androidTestImplementation
Direktive zum Importieren von Bibliotheken in instrumentierten Tests verwendet wird, nicht jedoch in lokalen JVM- / Komponententests.Wenn Sie
AndroidJUnit4
in einem lokalen JVM / Unit-Test verwenden möchten, verwenden Sie stattdessen die folgende AbhängigkeitDas Gleiche gilt, wenn Sie die letztere Abhängigkeit hinzufügen, während Sie sie
AndroidJUnit4
im instrumentierten Test verwendenCannot resolve symbol 'AndroidJUnit4'
. weil Sie die falsche Anweisung verwenden.quelle
Wenn noch jemand dieses Problem hat:
Fügen Sie unter Verwendung von API 27 im
build.gradle
App-Modul die folgenden Zeilen hinzu:quelle
Fügen Sie diesen Code in Ihre Abhängigkeiten ein
quelle
Wenn Sie ein Projekt mit mehreren Build-Typen verwenden, muss der ausgewählte Build-Typ im Build-Varianten-Fenster mit dem Tag testBuildType in der build.gradle-Datei des Moduls angegeben werden.
Zum Beispiel: Wenn Sie ein Debug vom Typ Build verwenden , sollten Sie hinzufügen
android{testBuildType "debug" }
, wenn Sie Stage verwenden, fügen Sie eineandroid{testBuildType "stage"}
Anweisung im Android-Tag hinzu.quelle
Verschieben Sie die Testklasse nach src / androidTest / java /. Dann wird die Abhängigkeit aufgelöst.
quelle
Der klassische Invalidate Caches / Restart hat mir geholfen! :) :)
quelle
Fügen Sie diese Abhängigkeit in Ihre build.gradle-Datei ein:
Aktualisieren Sie die Endversion (
1.1.1
) mit der neuesten veröffentlichten Version.quelle
Hinzufügen
genau dieses Problem für mich gelöst.
quelle
compile
Direktiven benennen Abhängigkeiten, die in der Haupt-App verwendet werden, während NamensabhängigkeitenandroidTestComiple
zum Testen verwendet werden. Die richtige Antwort ist alsoandroidTestCompile
, nicht zu verwendencompile
.Wie die Liste der Antworten zeigt, kann dies durch einige Dinge verursacht werden. Noch eine für die Liste:
Ich habe einen übereifrigen LINT ausgeführt, der alle nicht verwendeten Importe entfernt hat. Dies führt zu denselben Fehlern, und es ist leicht zu übersehen, dass dies das Problem ist.
Android-Studio hebt Referenzen hervor, die im Testcode fehlen - und das ALT-ENTER-Popup wird angezeigt (dies ist das Bit, das leicht zu übersehen ist).
Als nächstes muss ich die Tests aus LINT entfernen - oder zumindest diese Warnung deaktivieren.
Edit: @ Code-Apprentice, die fehlenden Zeilen waren:
Der erste Fehler in der Datei war also
@RunWith(AndroidJUnit4.class)
zu Beginn meiner Testklasse.quelle
Kurzgeschichtenversion:
Ich beantworte diesen Fragenbeitrag am 15. Februar 2020. Leider habe ich alle hier und anderswo genannten möglichen Lösungen ausgeschöpft.
https://github.com/codepath/android_guides/wiki/UI-Testing-with-Espresso
https://github.com/udacity/AdvancedAndroid_TeaTime/issues/14
Android Espresso: Symbol AndroidJUnit4.class kann nicht aufgelöst werden
Symbol AndroidJUnit4 kann nicht aufgelöst werden
Android Espresso: Symbol AndroidJUnit4.class kann nicht aufgelöst werden
Ja, keiner von ihnen funktioniert. Ich verwende die integrierte Funktion "Zu Andoridx migrieren". Sie erinnert mich möglicherweise daran, dass ich meine Ziel-SDK-Versionen und meine Gradle-Version aktualisieren muss. Nachdem ich meine Gradle-Version von 2.0.2 auf 3.5.3 aktualisiert habe. Sie funktionieren einfach, sogar die alte Importanweisung funktioniert.
quelle
Der gleiche Fehler trat mir auf, als ich der Google IOSched-App folgte und mein Projekt mit drei Build-Typen [Debug, Release, Staging] einrichtete, bei denen Debug und Release dasselbe Quellverzeichnis verwenden
testBuildType
Geben Sie in diesem Fall die Datei build.gradle auf Modulebene an. Das Projekt sollte nun in der Lage sein, das Symbol 'AndroidJUnit4' aufzulösen.Referenz: https://github.com/google/iosched/blob/master/mobile/build.gradle
quelle