De toute évidence, j'ai besoin de la déclaration d'importation correcte pour résoudre ce problème. Selon la documentation pourAndroidJUnit4
, cela devrait être
import android.support.test.runner.AndroidJUnit4;
Lorsque je fais cela, Android Studio est mis runner
en évidence en rouge et se plaint "Impossible de résoudre le symbole" runner "".
Contexte
Je suis arrivé à ce point en suivant les tutoriels sur le site Android Developer pour configurer des tests à l'aide de UI Automator . Le premier problème que j'ai rencontré était cela com.android.support:support-v4:22.2.0
et com.android.support.test:runner:0.2
dépendait de différentes versions de com.android.support:support-annotations
. J'ai suivi les suggestions de ce rapport de bogue Android et ajouté ce qui suit allprojects
dans mon projet build.gradle
:
configurations.all {
resolutionStrategy.force 'com.android.support:support-annotations:22.1.0'
}
Cela a résolu l'erreur immédiate, mais je soupçonne que cela a conduit à mes problèmes actuels. Quelqu'un a-t-il des suggestions sur la façon de résoudre ce problème?
Relevent sections de `./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
la source
com.android.support.test:runner
carrément absent . Pouvez-vous confirmer viagradle dependencies
que vous tirez toujours cela après leresolutionStrategy
changement?(*)
veut dire aprèscom.android.support.test:runner:0.2
.Réponses:
Assurez-vous que votre application est dans la variante de version de débogage. Accédez à Build> Select Build Variant ... et ce qui suit devrait apparaître:
la source
android { testBuildType "staging"}
debug
ne fonctionnent pas à moins qu'ils ne soient explicitement définis sur "debug"J'ai fait l'erreur de mettre les classes de test à src / test . Après les avoir déplacés vers src / androidTest / java /, la dépendance a été résolue.
la source
Ok alors voici votre erreur et la mienne!
Si nous voulons écrire une partie de code pour les tests unitaires locaux, nous ne devrions pas utiliser
@RunWith(AndroidJUnit4.class)
car nous n'utilisons pas AndroidJUnit4 mais nous avons besoin de Junit4. nous devrions donc écrire@RunWith(JUnit4.class)
. Et bien sûr, votre fichier de test java se trouve sous leapp/src/test/java/your.package.name
répertoire.Sinon, si (!!) nous voulons écrire un test unitaire instrumenté Android, nous devrions mettre nos fichiers java de test dans le
app/src/androidTest/java/your.package.name
répertoire et utiliser une annotation comme@RunWith(AndroidJUnit4.class)
la source
Mettre à jour
La bibliothèque de tests Android fait désormais partie d'AndroidX. Assurez-vous d'utiliser les dépendances Gradle correctes trouvées dans la documentation officielle .
Réponse originale
J'ai trouvé ici qu'il existe des versions plus récentes de la bibliothèque de support de test que ce que j'utilisais:
Remarque: veillez à utiliser les versions les plus récentes de ces bibliothèques. Cette question remonte à une époque où la bibliothèque de support de test Android était nouvelle et les numéros de version ici sont très obsolètes.
la source
J'ai résolu le problème en apportant une petite modification au fichier build.gradle de l'application. Dans la
dependencies { ... }
section, assurez-vous d'inclure la ligne suivante:ou quelle que soit la version la plus récente à ce stade (
...Compile
est obsolète et a été remplacée par...Implementation
). Notez l'utilisation dedebugImplementation
. Android Studio a suggéré de l'inclure automatiquement avecandroidTestImplementation
, ce qui n'a pas fonctionné.J'ai découvert comment le changer de test en débogage en regardant dans Structure du projet sous Dépendances du module d'application, où vous pouvez modifier la portée de chaque dépendance, voir ci-dessous.
la source
Notez que l'OP est maintenant en 2019, âgé de 4 ans, donc si vous utilisez Android X, il
AndroidJUnit4.class
est obsolète, vous avez une erreur là-bas et une autre avec ceciandroidx.test.ext.junit.runners.AndroidJUnit4
. Je suggère de lire ces liens pour résoudre le problème.AndroidJUnit4.class est obsolète: comment utiliser androidx.test.ext.junit.runners.AndroidJUnit4?
Migration des tests Junit4 vers androidx: quelles sont les causes du "délégué runner n'a pas pu être chargé"? Pour moi, Android Studio a suggéré de remplacer
qui était obsolète avec
et ça
avec ça
Après cela, l'erreur a disparu mais je ne sais pas si le futur test en cours d'exécution est correct?!
la source
Dans mon cas, cela a aidé pour la variante de publication:
la source
La cause commune de ce problème est que lors de l'ajout de la dépendance ci-dessous:
C'est une dépendance correcte si vous allez utiliser des tests instrumentés (tests dans le
androidTest
package java)Mais pour implémenter des tests unitaires locaux (tests dans le
test
package java) tout en utilisant la dépendance mentionnée ci-dessus; alors tu feras faceCannot resolve symbol 'AndroidJUnit4'
En effet, la
androidTestImplementation
directive est utilisée pour importer des bibliothèques dans les tests instrumentés, mais pas dans les tests unitaires / JVM locaux.Si vous souhaitez utiliser
AndroidJUnit4
dans un test JVM / unitaire local, utilisez plutôt la dépendance ci-dessousLa même chose s'applique si vous ajoutez cette dernière dépendance lors de l'utilisation
AndroidJUnit4
dans un test instrumenté, vous obtiendrez égalementCannot resolve symbol 'AndroidJUnit4'
; parce que vous utilisez la mauvaise directive.la source
Si quelqu'un a toujours ce problème:
et à l'aide de l'API 27, dans le
build.gradle
module qui se trouve dans l'application, ajoutez les lignes suivantes:la source
mettez ce code dans vos dépendances
la source
Si vous utilisez un projet avec plusieurs types de construction, le type de construction sélectionné dans la fenêtre de variante de construction doit être mentionné avec la balise testBuildType dans le fichier build.gradle du module.
Par exemple: si vous utilisez le débogage de type build, vous devez ajouter
android{testBuildType "debug" }
, si vous utilisez stage, ajoutez uneandroid{testBuildType "stage"}
instruction dans la balise android.la source
Déplacez la classe de test vers src / androidTest / java /. Ensuite, la dépendance se résoudra.
la source
Le classique Invalidate Caches / Restart m'a aidé! :)
la source
Ajoutez cette dépendance dans votre fichier build.gradle:
Mettez à jour la version finale (
1.1.1
) avec la dernière version publiée.la source
Ajouter
résolu ce problème exact pour moi.
la source
compile
les dépendances de noms de directives utilisées dans l'application principale tandis que lesandroidTestComiple
dépendances de noms utilisées pour les tests. Donc, la bonne réponse est d'utiliserandroidTestCompile
, noncompile
.Comme le montre la liste des réponses, cela peut être dû à plusieurs facteurs. Un de plus pour la liste:
J'ai exécuté un LINT trop zélé qui a supprimé toutes les importations inutilisées. Cela produira les mêmes erreurs, et il est facile de rater que c'est là le problème.
Android-studio mettra en évidence les références qui manquent dans le code de test - et la fenêtre contextuelle ALT-ENTER apparaîtra (c'est le bit qui est facile à manquer).
Ensuite, je dois supprimer les tests de LINT - ou au moins désactiver cet avertissement.
Edit: @ Code-Apprentice, les lignes manquantes étaient:
Donc, la première erreur dans le fichier était
@RunWith(AndroidJUnit4.class)
au début de ma classe de test.la source
Version courte histoire:
Je réponds à cette question le 15 février 2020. Malheureusement, j'ai épuisé toutes les solutions possibles mentionnées ici et ailleurs.
https://github.com/codepath/android_guides/wiki/UI-Testing-with-Espresso
https://github.com/udacity/AdvancedAndroid_TeaTime/issues/14
Android Espresso: impossible de résoudre le symbole AndroidJUnit4.class
Impossible de résoudre le symbole AndroidJUnit4
Android Espresso: impossible de résoudre le symbole AndroidJUnit4.class
Oui, aucun d'entre eux ci-dessus ne fonctionne. J'utilise la fonction intégrée "Migrer vers Andoridx", cela peut me rappeler que je dois mettre à jour mes versions cibles du SDK et ma version gradle. Après avoir mis à niveau ma version gradle de 2.0.2 à 3.5.3. Ils fonctionnent juste, même l'ancienne déclaration d'importation fonctionne.
la source
La même erreur m'est apparue lorsque je suis l'application Google IOSched et que j'ai configuré mon projet avec trois types de build [débogage, publication, préparation] où débogage et publication partagent le même répertoire source
Dans ce cas, spécifiez le
testBuildType
dans votre fichier build.gradle au niveau du module et le projet devrait maintenant être en mesure de résoudre le symbole 'AndroidJUnit4'.Référence: https://github.com/google/iosched/blob/master/mobile/build.gradle
la source