De toute évidence, j'ai besoin de la déclaration d'importation correcte pour résoudre ce problème. Selon les docs pour AndroidJUnit4
, cela devrait être
import Android.support.test.runner.AndroidJUnit4;
Lorsque je le fais, Android Studio met en surbrillance runner
en rouge et se plaint de "Impossible de résoudre le symbole 'coureur'".
Contexte
Je suis arrivé à ce point en suivant les tutoriels sur le site de développement Android pour la configuration des tests à l'aide de UI Automator . Le premier problème que j'ai rencontré est que com.Android.support:support-v4:22.2.0
et com.Android.support.test:runner:0.2
dépendent 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 le build.gradle
de mon projet:
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 entraîné mes problèmes actuels. Quelqu'un at-il des suggestions sur la façon de résoudre ce problème?
Sections pertinentes de `./gradlew: app: dépendances
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
Mettre à jour
La bibliothèque de tests Android fait maintenant partie d'AndroidX. Veillez à 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 celle que j'utilisais:
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'
}
Remarque: veillez à utiliser les versions les plus récentes de ces bibliothèques. Cette question a été posée à un moment où la bibliothèque de test Android Test était nouvelle et les numéros de version ici très obsolètes.
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.
Ok donc voici ton erreur et la mienne!
Si nous allons écrire un extrait de code pour Test d'unité locale , 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 dans le répertoire app/src/test/Java/your.package.name
.
Sinon si (!!) nous voulons écrire quelques Android Instrumented Unit Test nous devrions placer nos fichiers Java de test dans le répertoire app/src/androidTest/Java/your.package.name
et utiliser des annotations comme @RunWith(AndroidJUnit4.class)
J'ai résolu le problème en apportant une petite modification au fichier build.gradle de l'application. Dans la section dependencies { ... }
, veillez à inclure la ligne suivante:
debugImplementation 'com.Android.support.test:runner:1.0.1'
ou quelle que soit la version la plus récente à ce moment-là (...Compile
est obsolète et a été remplacé par ...Implementation
). Note l'utilisation de debugImplementation
. Android Studio a suggéré de l'inclure automatiquement avec androidTestImplementation
, ce qui n'a pas fonctionné.
J'ai découvert comment changer de test en débogage en consultant la structure de projet sous Dépendances du module d'application, où vous pouvez modifier l'étendue de chaque dépendance, voir ci-dessous.
Dans mon cas, cela a aidé pour la variante de publication:
Android {
...
testBuildType "release"
}
Si quelqu'un a encore ce problème:
Impossible de résoudre le symbole 'AndroidJUnit4'
et en utilisant l'API 27, dans le build.gradle
qui se trouve dans le module d'application, ajoutez les lignes suivantes:
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'
mettre ce code dans vos dépendances
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'
})
Notez que cet OP est maintenant en 2019, il a 4 ans. Si vous utilisez Android X, alors AndroidJUnit4.class
est obsolète, vous avez une erreur et une de plus avec ce androidx.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é ne peut pas être chargé'? Pour moi Android Studio a suggéré de remplacer
@RunWith(AndroidJUnit4.class)
qui a été déconseillé avec
@RunWith(AndroidJUnit4ClassRunner.class)
et ça
androidx.test.ext.junit.runners.AndroidJUnit4
avec ça
import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner;
Après cela, l’erreur est partie mais je ne sais pas si le futur test fonctionnera correctement?!
Déplacez la classe de test vers src/androidTest/Java /. Ensuite, la dépendance sera résolue.
Si vous utilisez un projet avec plusieurs types de construction, le type de construction sélectionné dans la fenêtre variante de construction doit être mentionné avec la balise testBuildType dans le fichier build.gradle du module.
Par exemple: Si vous utilisez le type de construction debug , vous devez ajouter Android{testBuildType "debug" }
, si vous utilisez stage puis ajoutez la déclaration Android{testBuildType "stage"}
dans la balise Android.
Le classique Invalidate Caches/Restart m'a aidé! :)
Ajouter
compile com.Android.support.test:runner:0.5'
résolu ce problème exact pour moi.
Comme le montre la liste des réponses, ceci peut être causé par quelques 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 le problème.
Android-studio mettra en évidence les références manquantes dans le code de test - et la fenêtre contextuelle ALT-ENTER apparaîtra (il s'agit d'un bit facile à manquer).
Ensuite, je dois supprimer les tests de LINT - ou au moins désactiver cet avertissement.
Edit: @ Code-Apprentice, les lignes manquantes étaient:
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;
La première erreur dans le fichier était donc avec @RunWith(AndroidJUnit4.class)
au début de ma classe de test.